home *** CD-ROM | disk | FTP | other *** search
Text File | 1994-01-20 | 134.7 KB | 3,106 lines |
-
- ** Programmer's Technical Reference for MSDOS and the IBM PC **
- USA copyright TXG 392-616 ALL RIGHTS RESERVED
- ──────────────────────────┤ DOSREF (tm) ├───────────────────────────
- ISBN 1-878830-02-3 (disk-based text)
- Copyright (c) 1987, 1994 Dave Williams
- ┌─────────────────────────────┐
- │ Shareware Version, 01/20/94 │
- │ Please Register Your Copy │
- └─────────────────────────────┘
-
- C H A P T E R T H R E E
-
-
- R O M B I O S A N D S E R V I C E I N T E R R U P T S
-
-
- C O N T E N T S
-
-
- Calling the ROM BIOS ............................................ 3**1
- Interrupt 10h Video Services ................................... 3**2
- Interrupt 11h Equipment Check .................................. 3**3
- Interrupt 12h Memory Size ...................................... 3**4
- Interrupt 13h Disk Functions ................................... 3**5
- Interrupt 14h Initialize and Access Serial Port ................ 3**6
- FOSSIL Drivers ................................... 3**7
- Interrupt 15h Cassette I/O ..................................... 3**8
- Interrupt 16h Keyboard I/O ..................................... 3**9
- Interrupt 17h Printer .......................................... 3**10
- Interrupt 18h ROM BASIC ........................................ 3**11
- Interrupt 19h Bootstrap Loader ................................. 3**12
- Interrupt 1Ah Time of Day ...................................... 3**13
- Interrupt 1Bh Control-Break .................................... 3**14
- Interrupt 1Ch Timer Tick ....................................... 3**15
- Interrupt 1Dh Vector of Video Initialization Parameters ........ 3**16
- Interrupt 1Eh Vector of Diskette Controller Parameters ......... 3**17
- Interrupt 1Fh Ptr to Graphics Char Extensions (Graphics Set 2) . 3**18
-
-
-
- The ROM BIOS is the lowest level of software access. It contains
- the following routines:
-
- (all)
- power-on self-test (POST)
- boostrap loader
- clock
- floppy disk I/O
- video I/O
- keyboard
- serial ports
- parallel ports
- print screen
- equipment check
- report memory size
-
-
- (AT)
- hard disk I/O
- report memory size (extended memory)
- extended memory block moves
- enhanced video and keyboard I/O
- high resolution timer
- alarm
-
- Machines such as the PC Convertible, PCjr, and non-IBM machines add
- additional functions.
-
-
- Calling the ROM BIOS ............................................ 3**1
-
- The BIOS services are invoked by placing the number of the desired
- function in register AH, subfunction in AL, setting the other
- registers to any specific requirements of the function, and invoking
- any of ints 10h through int 1Fh.
-
- The original IBM PC Technical Reference gave the absolute addresses
- of the ROM routines. Some early software jumped directly to these
- addresses, with mixed results on non-IBM BIOSes. This practice was
- common on machines predating the PC, but there is no practical use for
- it now. The OS/2 1.x Compatibility Box also does not support jumping
- directly into the ROM.
-
- When the interrupt is called, all register and flag values are
- pushed into the stack. The interrupt address contains a pointer into
- an absolute address in the ROM BIOS chip address space. This location
- may be further vectored into the IBMBIO.COM (or equivalent) file or
- user file.
-
- At power-up, many BIOSes point unused interrupt vectors to zero.
- Others point to an interrupt handler routine, usually just an IRET
- instruction. Still others don't even make an attempt to initialize
- unused vectors. A common programming mistake is to expect
- uninitialized vectors will be zero.
-
- The address vector points to a particular BIOS command handler. The
- handler pops the register values, compares them to its list of
- functions, and executes the function if valid. When the function is
- complete, it may pass values back to the command handler. The handler
- will push the values into the stack and then return control to the
- calling program.
-
- Most functions will return an error code; some return more
- information. Details are contained in the listings for the individual
- functions.
-
- Register settings listed are the ones used by the BIOS. Some
- functions will return with garbage values in unused registers. Do not
- test for values in unspecified registers; your program may exhibit odd
- behavior.
-
-
- Three sets of BIOS routines are available: PC BIOS, AT BIOS (also
- called CBIOS or "Old compatibility BIOS", and the PS/2 ABIOS "Advanced
- BIOS".
-
- The Advanced BIOS is contained in PS/2 ROMs. It is primarily
- intended for OS use rather than application use. OS/2 can take
- advantage of ABIOS routines to reduce RAM use on PS/2 systems. The
- ABIOS can be replaced by disk and RAM based ABIOS code if desired.
- There is a new BIOS Data Area defined in high memory that occupies one
- K of RAM. In OS/2 systems, parts of the ABIOS are replaced by OS/2
- drivers.
-
- While the CBIOS must be addressed via pointers, the routines in the
- ABIOS are fixed in absolute locations so they can be referenced
- directly by OS/2.
-
- The ABIOS can run in protected mode, and is fully reentrant. It
- supports three types of function requests - single staged, discrete
- multistaged, or continuous multistaged. A single-staged request does
- its job immediately and returns control to the caller. A discrete
- multistaged request may happen in two or more stages with pauses
- between the stages. The caller may regain control during the pauses.
- A continuous multistaged request starts a staged operation that never
- ends. (sometimes called a daemon).
-
- Unlike the CBIOS which is called with software interrupts, ABIOS is
- accessed with FAR calls. ABIOS calls are completely reentrant in both
- real and protected modes. To call an ABIOS function, the calling
- program must pass pointers to two data structures - a request block
- and a common data area. The request block specifies the desired
- function number and the common data area is a table that contains
- pointers to all the ABIOS' other tables and data areas. The common
- data area's internal structure contains the function transfer tables
- which have the addresses of the BIOS routines.
-
- ABIOS stack frame and calling conventions:
- bytes stack contents
- 2 common data area pointer (segment/selector only)
- required
- 4 request block pointer - required
- 4 function transfer table pointer - furnished by ABIOS
- or caller
- 4 device block pointer - furnished by ABIOS or caller
- 4 return address
-
- In ABIOS Transfer Convention, only the first two items are required.
- ABIOS assigns the second two. In Operating System Transfer
- Convention, the caller provides the second two. Since the parameters
- are not removed from the stack on return to the caller, the operating
- system may save the function transfer table and device addresses after
- they have been furnished by the ABIOS by a call.
-
- ABIOS does no interrupt arbitration. It assumes all interrupts are
- handled by the caller or the OS and it is called only for service. If
- more than one device is sharing a hardware interrupt, the OS must
- determine which interrupt is valid for the ABIOS.
-
- OS/2 may use the ABIOS if found, but otherwise duplicates the BIOS
- calls for the DOS Compatibility Box by vectoring BIOS calls into its
- own device drivers. This makes it rather difficult for DOS drivers
- for mass storage, high resolution video boards, multitasking APIs
- using int 15h, etc. If your software needs to manipulate hardware
- directly you might want to check if your code is running under OS/2.
- The simplest method is to check for DOS version 10 or higher.
-
-
- note Some references list an "XT/2" machine, which was reputedly
- an 8mHz 8088 with 640k and a clock on the motherboard. IBM
- doesn't list such a machine, and I have a late '86 XT, one of
- the last made. It is pretty much like the older ones.
-
-
- ┌─────────────────────────────────────────────────────────────────────┐
- │Interrupt 10h Video Services 3**2 │
- └─────────────────────────────────────────────────────────────────────┘
- (0:0040h) The BIOS Video Services may be found in Chapter 16.
-
- (internal) Coprocessor Error (80286+)
- Generated by the CPU when the -ERROR pin is asserted by the
- coprocessor (usually 80x87, but may be any multimaster CPU or
- alternate NDP such as Weitek, etc.). ATs and clones usually
- wire the coprocessor to use IRQ13, but not all get it right.
-
-
- ┌─────────────────────────────────────────────────────────────────────┐
- │Interrupt 11h Equipment Check 3**3 │
- └─────────────────────────────────────────────────────────────────────┘
- (0:0044h) Reads the BIOS Data Area and returns two bytes of setup
- information.
- entry no parameters are required
- return AX Equipment listing word. Bits are:
- 0 number of floppy drives
- 0 no drives
- 1 bootable (IPL) diskette drive installed
- 1 math chip
- 0 no math coprocessor (80x87) present
- 1 math coprocessor (80x87) present
- (PS/2) 2 0 mouse not installed
- 1 mouse installed
- (PC) 2,3 system board RAM
- 0,0 16k (PC-0, PC-1)
- 0,1 32k
- 1,0 48k
- 1,1 64k (PC-2, XT)
- note 1) not commonly used. Set both bits to 1
- 2) both bits always 1 in AT
- 4,5 initial video mode
- 0,0 no video installed
- (use with dumb terminal)
- 0,1 40x25 color (CGA)
- 1,0 80x25 color
- (CGA, EGA, PGA, MCGA, VGA)
- 1,1 80x25 monochrome (MDA or Hercules,
- most super-hires mono systems)
- 6,7 number of diskette drives (only if bit 0 is 1)
- 0,0 1 drives
- 0,1 2 drives
- 1,0 3 drives
- 1,1 4 drives
- 8 0 DMA present
- 1 no DMA (PCjr, some Tandy 1000s, 1400LT)
- 9,A,B number of RS232 serial ports (0-3)
- 0,0,0 none
- 0,0,1 1
- 0,1,0 2
- 0,1,1 3
- 1,0,0 4
- C 0 no game I/O attached
- 1 game I/O attached (default for PCjr)
- D serial accessory installation
- 0 no serial accessories installed
- 1 Convertible - internal modem installed
- or PCjr - serial printer attached
- E,F number of parallel printers
- 0,0 none
- 0,1 one (LPT1, PRN)
- 1,0 two (LPT2)
- 1,1 three (LPT3)
- note Models before PS/2 would allow a fourth
- parallel printer. Remapping of the
- BIOS in the PS/2s does not allow the
- use of LPT4.
- (386 extended AX)
- 23d 0 Weitek ABACUS - virtual '86 EMS page
- tables not correctly initialized
- 1 Weitek ABACUS - virtual '86 EMS page
- tables OK
-
- 24d 0 Weitek ABACUS NDP not present
- 1 Weitek ABACUS NDP present
-
- note Not all BIOSes properly return the presence of a game port.
- In my experience, most BIOSes require a joystick to actually
- be present even if the port is otherwise enabled.
-
-
-
- ┌─────────────────────────────────────────────────────────────────────┐
- │Interrupt 12h Memory Size 3**4 │
- └─────────────────────────────────────────────────────────────────────┘
- (0:0048h) get amount of system memory
- entry no parameters required
- return AX number of contiguous 1K RAM blocks available for DOS
- note 1) This is the same value stored in absolute address 04:13h.
- 2) For some early PC models, the amount of memory returned by this
- call is determined by the settings of the DIP switches on the
- motherboard and may not reflect all the memory that is
- physically present.
- 3) For the PC/AT, the value returned is the amount of functional
- memory found during the power-on self-test, regardless of the
- memory size configuration information stored in CMOS RAM.
- 4) The value returned does not reflect any extended memory (above
- the 1 Mb boundary) that may be present on machines using 80286
- or later microprocessors.
-
-
-
- ┌─────────────────────────────────────────────────────────────────────┐
- │Interrupt 13h Disk Functions 3**5 │
- └─────────────────────────────────────────────────────────────────────┘
- (0:0049h) The service calls for BIOS disk functions are located
- in Chapter 8.
-
-
-
-
- ┌─────────────────────────────────────────────────────────────────────┐
- │Interrupt 14h Initialize and Access Serial Port For Int 14 3**6 │
- └─────────────────────────────────────────────────────────────────────┘
- Note 1) Some IBM PS/2 Model 50Z machines were delivered with serial
- ports that did not meet specification. Some cheap clone serial
- ports may also be troublesome.
- 2) The standard IBM serial routines are unbuffered and not
- interrupt driven. They are fairly useless for anything other
- than serial printers. Most application software either
- programs the UARTs directly or use a driver with a high-level
- interface such as a FOSSIL.
- 3) PC-MOS/386' $SERIAL.SYS driver is buffered, device-independent,
- and interrupt-driven. It supports COM1 through COM24.
-
- (0:0050h) the following status is defined:
-
- serial status byte:
- bits 0 delta clear to send
- 1 delta data set ready
- 2 trailing edge ring detector
- 3 delta receive line signal detect
- 4 clear to send
- 5 data set ready
- 6 ring indicator
- 7 receive line signal detect
-
- line status byte:
- bits 0 data ready
- 1 overrun error
- 2 parity error
- 3 framing error
- 4 break detect
- 5 transmit holding register empty
- 6 transmit shift register empty
- 7 time out
-
- note: if bit 7 set then other bits are invalid
-
- Though present on the IBM PS/2s, COM3 and COM4 are not widely
- standardized across the industry. The most common definitions
- are:
-
- port addr. IRQ interrupt
-
- COM1 3F8 IRQ4 int 0Ch
- COM2 2F8 IRQ3 int 0Bh
- COM3 3E8 IRQ4 int 0Ch
- COM4 2E8 IRQ3 int 0Bh
-
- As you can see, COM1/COM3 and COM2/COM4 are siamesed. Since
- the ISA bus does not support shared interrupts, simultaneous
- access of two of a pair may cause conflict. For example, a
- mouse and a modem would not coexist well on paired ports.
-
-
- All routines have AH=function number and DX=RS232 card number (0
- based). AL=character to send or received character on exit, unless
- otherwise noted.
-
- entry AH 00h Initialize and Access Serial Port
- bit pattern: BBBPPSLL
- BBB = baud rate: 110, 150, 300, 600, 1200,
- 2400, 4800, 9600
- PP = parity: 01 = odd, 11 = even
- S = stop bits: 0 = 1, 1 = 2
- LL = word length: 10 = 7-bits, 11 = 8-bits
- AL parms for initialization:
- bit pattern:
- 0 word length
- 1 word length
- 2 stop bits
- 3 parity
- 4 parity
- 5 baud rate
- 6 baud rate
- 7 baud rate
- word length 10 7 bits
- 11 8 bits
- stop bits 0 1 stop bit
- 1 2 stop bits
- parity 00 none
- 01 odd
- 11 even
- baud rate 000 110 baud
- 001 150 baud
- 010 300 baud
- 011 600 baud
- 100 1200 baud
- 101 2400 baud
- 110 4800 baud
- 111 9600 baud (4800 on PCjr)
- DX port number (0=COM1, 1=COM2, etc.)
- return AH line status
- AL modem status
- note To initialize the serial port to more than 9600 baud on PS/2
- machines, see functions 04h and 05h.
-
-
- Function 01h Send Character in AL to Comm Port
- entry AH 01h
- AL character
- DX port number (0 - 3)
- return AH RS232 status code
- bit 0 data ready
- 1 overrun error
- 2 parity error
- 3 framing error
- 4 break detected
- 5 transmission buffer register empty
- 6 transmission shift register empty
- 7 timeout
- AL modem status
- bit
- 0 delta clear-to-send
- 1 delta data-set-ready
- 2 trailing edge ring detected
- 3 change, receive line signal detected
- 4 clear-to-send
- 5 data-set-ready
- 6 ring received
- 7 receive line signal detected
-
-
- Function 02h Wait For A Character From Comm Port DX
- entry AH 02h
- DX port number (0-3)
- return AL character received
- AH error code (see above)(00h for no error)
-
-
- Function 03h Fetch the Status of Comm Port DX (0 or 1)
- entry AH 03h
- DX port (0-3)
- return AH set bits (01h) indicate comm-line status
- bit 7 timeout
- bit 6 empty transmit shift register
- bit 5 empty transmit holding register
- bit 4 break detected ("long-space")
- bit 3 framing error
- bit 2 parity error
- bit 1 overrun error
- bit 0 data ready
- AL set bits indicate modem status
- bit 7 received line signal detect
- bit 6 ring indicator
- bit 5 data set ready
- bit 4 clear to send
- bit 3 delta receive line signal detect
- bit 2 trailing edge ring detector
- bit 1 delta data set ready
- bit 0 delta clear to send
-
-
- Function 04h Extended Initialize
- (Convertible, PS/2)
- entry AH 04h
- AL break status
- 01h if break
- 00h if no break
- BH parity
- 00h no parity
- 01h odd parity
- 02h even parity
- 03h stick parity odd
- 04h stick parity even
- BL number of stop bits
- 00h one stop bit
- 01h 2 stop bits (1½ if 5 bit word length)
- CH word length
- 00h 5 bits
- 01h 6 bits
- 02h 7 bits
- 03h 8 bits
- CL baud rate
- 00h 110
- 01h 150
- 02h 300
- 03h 600
- 04h 1200
- 05h 2400
- 06h 4800
- 07h 9600
- 08h 19200
- DX comm port (0-3)
- return AH line control status
- AL modem status
- note Provides a superset of fn 00h capabilities for PS/2 machines.
-
-
- Function 05h Extended Communication Port Control
- (Convertible, PS/2)
- entry AH 05h
- AL 00h read modem control register
- 01h write modem control register
- BL modem control register
- bits 0 DTR data terminal ready
- 1 RTS request to send
- 2 out1
- 3 out2
- 4 loop
- 5,6,7 reserved
- DX port number (0=COM1, 1=COM2, etc.)
- return AH port status (see 00h above)
- AL modem status (see 00h above)
- BL modem control register (see 01h above)
-
-
- Function 80-97h PC-MOS/386 Serial Device Interface
- (see PCMOS xhapter)
-
-
-
-
- FOSSIL Drivers .................................................. 3**7
-
- Interrupt 14h FOSSIL (Fido/Opus/Seadog Standard Interface Level)
-
- A FOSSIL is a device driver for handling the IBM PC
- serial communications ports in a standard fashion from
- an application (communications) program. A FOSSIL
- chains into the int 14h BIOS communications vector and
- replaces many functions with enhanced routines which
- may be easily accessed by an application.
-
- For all functions, all registers not specifically
- containing a function return value must be preserved
- across the call.
-
-
- entry AH 00h FOSSIL: Set Baud Rate And Parameters
- AL byte
- bits 7,6,5 baudrate
- 000 19200 baud
- 001 38400 baud
- 010 300 baud
- 011 600 baud
- 100 1200 baud
- 101 2400 baud
- 110 4800 baud
- 111 9600 baud
- bits 4,3 parity
- 00 none
- 01 odd
- 10 none
- 11 even
- bit 2 stop bits
- 0 1 stop bit
- 1 2 stop bits
- bit 1 char length
- 0 5 bits plus value
- other optional
- DX port number (NOP if DX=00FFh)
- return AX status (see fn 03h)
- note Low-order 5 bits are undefined by FOSSIL 1.0 spec.
-
-
- entry AH 01h FOSSIL: Transmit Character With Wait
- AL ASCII value of character to be sent
- DX port number (NOP if DX=00FFh)
- return AX status bits (see function 03h)
- note Character is queued for transmission. If there is room in the
- transmitter buffer when this call is made, the character will
- be stored and control returned to caller. If the buffer is
- full, the driver will wait for room. Use this function with
- caution when flow control is enabled.
-
-
- entry AH 02h FOSSIL: Receive A Character With Wait
- DX port number (0-3) (NOP if DX=00FFh)
- return AH RS-232 status code (see AH=00h above)
- AL ASCII value of character received from serial port
- note Will timeout if DSR is not asserted, even if function 03h
- returns data ready.
-
-
- entry AH 03h FOSSIL: Request Status
- DX port number (NOP if DX=00FFh)
- return AX status bit mask
- AH bit 0 set RDA input data is available
- in buffer
- 1 set OVRN input buffer overrun
- 2 N/A
- 3 N/A
- 4 N/A
- 5 set THRE room is available in output
- buffer
- 6 set TSRE output buffer is empty
- 7 N/A
- AL bit 0 N/A
- 1 N/A
- 2 N/A
- 3 set this bit is always set
- 4 N/A
- 5 N/A
- 6 N/A
- 7 set DCD carrier detect
- note Bit 3 of AL is always returned set to enable programs to use
- it as a carrier detect bit on hardwired (null modem) links.
-
-
- entry AH 04h FOSSIL: Initialize FOSSIL Driver
- BX 4F50h (optional)
- DX port number (DX=00FFh special)
- ES:CX pointer to ^C flag address (optional)
- return AX 1954h if successful
- BL maximum function number supported (excluding 7Eh-0BFh)
- BH revision of FOSSIL supported
- note 1) DTR is raised when FOSSIL inits.
- 2) Existing baudrate is preserved.
- 3) If BX contains 4F50h, the address specified in ES:CX is that
- of a ^C flag byte in the application program, to be
- incremented when ^C is detected in the keyboard service
- routines. This is an optional service and only need be
- supported on machines where the keyboard service can't (or
- won't) perform an int 1Bh or int 23h when a control-C is
- entered.
-
-
- entry AH 05h FOSSIL: Deinitialize FOSSIL Driver
- DX port number (DX=00FFh special)
- return none
- note 1) DTR is not affected.
- 2) Disengages driver from comm port. Should be done when
- operations on the port are complete.
- 3) If DX=00FFh, the initialization that was performed when
- FOSSIL function 04h with DX=00FFh should be undone.
-
-
- entry AH 06h FOSSIL: Raise/Lower DTR
- AL DTR state to be set
- 00h lower DTR
- 01h raise DTR
- DX comm port (NOP if DX=00FFh)
- return none
-
-
- entry AH 07h FOSSIL: Return Timer Tick Parameters
- return AH ticks per second on interrupt number shown in AL
- AL timer tick interrupt number (not vector!)
- DX milliseconds per tick (approximate)
-
-
- entry AH 08h FOSSIL: Flush Output Buffer
- DX port number (NOP if DX=00FFh)
- return none
- note Waits until all output is done.
-
-
- entry AH 09h FOSSIL: Purge Output Buffer
- DX port number (NOP if DX=00FFh)
- return none
- note Returns to caller immediately.
-
-
- entry AH 0Ah FOSSIL: Purge input buffer
- DX port number (NOP if DX=00FFh)
- return none
- note 1) If any flow control restraint has been employed (dropping
- RTS or transmitting XOFF) the port will be "released" by
- doing the reverse, raising RTS or sending XON.
- 2) Returns to caller immediately.
-
-
- entry AH 0Bh FOSSIL: Transmit No Wait
- AL ASCII character value to be sent
- DX port number (NOP if DX=00FFh)
- return AX 0000h character not accepted
- 0001h character accepted
- note This is exactly the same as the "regular" transmit call
- except that if there is no space available in the output
- buffer a value of zero is returned in AX, if room is
- available a value 1 (one) is returned.
-
-
- entry AH 0Ch FOSSIL: Nondestructive Read No Wait
- DX port number (NOP if DX=00FFh)
- return AH character
- 0FFFFh character not available
- note 1) Reads async buffer.
- 2) Does not remove keycode from buffer.
-
-
- entry AH 0Dh FOSSIL: Keyboard Read No Wait
- return AX IBM keyboard scan code or
- 0FFFFh if no keyboard character available
- note 1) Use IBM-style function key mapping in the high order byte.
- 2) Scan codes for non function keys are not specifically
- required but may be included.
- 3) Does not remove keycode from buffer.
-
-
- entry AH 0Eh FOSSIL: Keyboard Input With Wait
- return AX IBM keyboard scan code
- note Returns the next character from the keyboard or waits if
- no character is available.
-
-
- entry AH 0Fh FOSSIL: Toggle Flow Control
- AL bit mask describing requested flow control
- bits 0 XON/XOFF on transmit (watch for XOFF while
- sending)
- 1 CTS/RTS (CTS on transmit/RTS on receive)
- 2 reserved
- 3 XON/XOFF on receive (send XOFF when buffer
- near full)
- 4-7 not used, FOSSIL spec calls for setting to 1
- DX port number (NOP if DX=00FFh)
- return none
- note 1) Bit 2 is reserved for DSR/DTR, but is not currently
- supported in any implementation.
- 2) TRANSMIT flow control allows the other end to restrain the
- transmitter when you are overrunning it. RECEIVE flow control
- tells the FOSSIL to attempt to do just that if it is being
- overwhelmed.
- 3) Enabling transmit XON/XOFf will cause the FOSSIL to stop
- transmitting upon receiving an XOFf. The FOSSIL will resume
- transmitting when an XON is received.
- 4) Enabling CTS/RTS will cause the FOSSIL to cease transmitting
- when CTS is lowered. Transmission will resume when CTS is
- raised. The FOSSIL will drop RTS when the receive buffer
- reaches a predetermined percentage full. The FOSSIL will
- raise RTS when the receive buffer empties below the
- predetermined percentage full. The point(s) at which this
- occurs is left to the individual FOSSIL implementor.
- 5) Enabling receive Xon/Xoff will cause the FOSSIL to send an XOFF
- when the receive buffer reaches a pre-determined percentage
- full. An XON will be sent when the receive buffer empties
- below the predetermined percentage full. The point(s) at which
- this occurs is left to the individual FOSSIL implementor.
- 6) Applications using this function should set all bits ON in the
- high nibble of AL as well. There is a compatible (but not
- identical) FOSSIL driver implementation that uses the high
- nibble as a control mask. If your application sets the high
- nibble to all ones, it will always work, regardless of the
- method used by any given driver.
-
-
- entry AH 10h Extended Ctrl-C/Ctrl-K Checking
- And Transmit On/Off
- AL flags bit mask byte (bit set if activated)
- bits 0 enable/disable Ctrl-C/Ctrl-K checking
- 1 disable/enable the transmitter
- 2-7 not used
- DX port number (NOP if DX=00FFh)
- return AX status byte
- 0000h control-C/K has not been received
- 0001h control-C/K has been received
- note This is used primarily for programs that can't trust XON/XOFF
- at FOSSIL level (such as BBS software).
-
-
- entry AH 11h FOSSIL: Set Current Cursor Location
- DH row (line) 0-24
- DL column 0-79
- return none
- note 1) This function looks exactly like the int 10h, fn 02h on the
- IBM PC. The cursor location is passed in DX: row in DH and
- column in DL. This function treats the screen as a coordinate
- system whose origin (0,0) is the upper left hand corner of the
- screen.
- 2) Row and column start at 0.
-
-
- entry AH 12h FOSSIL: Read Current Cursor Location
- return DH row (line)
- DL column
- note 1) Looks exactly like int 10h/fn 03h in the IBM PC BIOS. The
- current cursor location (same coordinate system as function
- 16h) is passed back in DX.
- 2) Row and column start at 0.
-
-
- entry AH 13h FOSSIL: Single Character ANSI Write To Screen
- AL value of character to display
- return none
- note This call might not be reentrant since ANSI processing may be
- through DOS.
-
-
- entry AH 14h FOSSIL: Toggle Watchdog Processing
- AL 00h to disable watchdog
- 01h to enable watchdog
- DX port number (NOP if DX=00FFh)
- return none
- note 1) This call will cause the FOSSIL to reboot the system if Carrier
- Detect for the specified port drops while watchdog is turned
- on.
- 2) The port need not be active for this function to work.
-
-
- entry AH 15h FOSSIL: Write Character To Screen Using BIOS
- AL ASCII code of character to display
- return none
- note 1) This function is reentrant.
- 2) ANSI processing may not be assumed.
-
-
- entry AH 16h FOSSIL: Insert or Delete a Function From The
- Timer Tick Chain
- AL 00h to delete a function
- 01h to add a function
- ES:DX address of function
- return AX 0000h successful
- 0FFFFh unsuccessful
-
-
- entry AH 17h FOSSIL: Reboot System
- AL boot type
- 00h cold boot
- 01h warm boot
- return none
-
-
- entry AH 18h FOSSIL: Read Block
- CX maximum number of characters to transfer
- DX port number (NOP if DX=00FFh)
- ES:DI pointer to user buffer
- return AX number of characters transferred
- note 1) This function does not wait for more characters to become
- available if the value in CX exceeds the number of characters
- currently stored.
- 2) ES:DI are left unchanged by the call; the count of bytes
- actually transferred will be returned in AX.
-
-
- entry AH 19h FOSSIL: Write Block
- CX maximum number of characters to transfer
- DX port number (NOP if DX=00FFh)
- ES:DI pointer to user buffer
- return AX number of characters transfered
- note ES and DI are not modified by this call.
-
-
- entry AH 1Ah FOSSIL: BREAK Signal Begin Or End
- AL 00h stop sending 'break'
- 01h start sending 'break'
- DX port number (NOP if DX=00FFh)
- return none
- note 1) Resets all transmit flow control restraints such as an XOFF
- received from remote.
- 2) Init (fn 04h) or UnInit (fn 05h) will stop an in-progress
- break.
- 3) The application must determine the "length" of the break.
-
-
- entry AH 1Bh FOSSIL: Return Driver Information
- CX size of user buffer in bytes
- DX port number (if DX=00FFh, port data will not be valid)
- ES:DI pointer to user buffer
- return AX number of characters transferred
- ES:DI user buffer structure:
- 00h word size of structure in bytes
- 02h byte FOSSIL driver version
- 03h byte revision level of this specific driver
- 04h dword FAR pointer to ASCII ID string
- 08h word size of the input buffer in bytes
- 0Ah word number of bytes in input buffer
- 0Ch word size of the output buffer in bytes
- 0Eh word number of bytes in output buffer
- 10h byte width of screen in characters
- 11h byte screen height in characters
- 12h byte actual baud rate, computer to modem
- (see mask in function 00h
- note 1) The baud rate byte contains the bits that fn 00h would use to
- set the port to that speed.
- 2) The fields related to a particular port (buffer size, space
- left in the buffer, baud rate) will be undefined if port=0FFh
- or an invalid port is contained in DX.
- 3) Additional information will always be passed after these, so
- that the fields will never change with FOSSIL revision changes.
-
-
- entry AH 7Eh FOSSIL: Install An External Application Function
- AL code assigned to external application
- ES:DX pointer to entry point
- return AX 1954h FOSSIL driver present
- not 1954h FOSSIL driver not present
- BH 00h failed
- 01h successful
- BL code assigned to application (same as input AL)
- note 1) Application codes 80h-0BFh are supported. Codes 80h-83h are
- reserved.
- 2) An error code of BH=00h with AX=1954h should mean that another
- external application has already been installed with the code
- specified in AL.
- 3) Applications are entered via a FAR call and should make a FAR
- return.
-
-
- entry AH 7Fh FOSSIL: Remove An External Application Function
- AL code assigned to external application
- ES:DX pointer to entry point
- return AX 1954h
- BH 00h failed
- 01h successful
- BL code assigned to application (same as input AL)
-
-
-
- ┌─────────────────────────────────────────────────────────────────────┐
- │Interrupt 15h Cassette I/O 3**8 │
- └─────────────────────────────────────────────────────────────────────┘
- (0:0054h) 1) Renamed "System Services" on PS/2 line.
- 2) Issuing int 15h on an XT may cause a system crash.
- On AT and after, interrupts are disabled with CLI when
- the interrupt service routine is called, but most ROM
- versions do not restore interrupts with STI.
- 3) For the original IBM PC, int 15h returns AH=80h and CF
- set for all calls with AH not 0,1, or 2.
- 4) For the PC/XT int 15h returns AH=86h, CF set if called
- at all. (the PC/XT ROM BIOS does not support int 15h)
- 5) For the AT/339, int 15h returns AH=86h, CF set if
- called with an invalid function code.
-
-
- Function 00h Turn Cassette Motor On
- (PC, PCjr only)
- entry AH 00h
- return CF set on error
- AH error code
- 00h no errors
- 01h CRC error
- 02h bad tape signals
- no data transitions (PCjr)
- 03h no data found on tape
- not used (PCjr)
- 04h no data
- no leader (PCjr)
- 80h invalid command
- 86h no cassette present
- not valid in PCjr
- note NOP for systems where cassette not supported.
-
-
- Function 01h Turn Cassette Motor Off
- (PC, PCjr only)
- entry AH 01h
- return CF set on error
- AH error code (86h)
- note NOP for systems where cassette not supported.
-
-
- Function 02h Read Blocks From Cassette
- (PC, PCjr only)
- entry AH 02h
- CX number of bytes to read
- ES:BX segment:offset + 1 of last byte read
- return CF set on error
- AH error code (01h, 02h, 04h, 80h, 86h)
- DX count of bytes actually read
- ES:BX pointer past last byte written
- note 1) NOP for systems where cassette not supported.
- 2) Cassette operations normally read 256 byte blocks.
-
-
- Function 03h Write Data Blocks to Cassette
- (PC, PCjr only)
- entry AH 03h
- CX count of bytes to write
- ES:BX pointer to data buffer
- return CF set on error
- AH error code (80h, 86h)
- CX 00h
- ES:BX pointer to last byte written+1
- note 1) NOP for systems where cassette not supported.
- 2) The last block is padded to 256 bytes with zeroes if needed.
- 3) No errors are returned by this service.
-
-
- Function 0Fh ESDI Format Unit Periodic Interrupt
- (PS/2 50+)
- entry AH 0Fh
- AL phase code
- 00h reserved
- 01h surface analysis
- 02h formatting
- return CF clear if formatting should continue
- set if it should terminate
- note 1) Called the BIOS on the ESDI Fixed Disk Drive Adapter/A during
- a format or surface analysis operation after each cylinder is
- completed.
- 2) This function call can be captured by a program so that it
- will be notified as each cylinder is formatted or analyzed.
- The program can count interrupts for each phase to determine
- the current cylinder number.
- 3) The BIOS default handler for this function returns with CF set.
-
-
- Function 10h TopView API Function Calls (TopView)
- see Chapter 17
-
-
- Function 20h PRINT.COM (DOS 3.1+ internal)
- (AT, XT/286, PS/2 50+)
- entry AH 20h
- AL subfunction
- 00h disable critical region flag
- 01h set critical region flag
- ES:BX pointer to flag byte set while inside
- DOS calls
- 10h set up SysReq routine
- 11h completion of SysReq routine (software only)
-
-
- Function 21h Read Power-On Self Test (POST) Error Log
- (PS/2 50+)
- entry AH 21h
- AL 00h read POST log
- 01h write POST log
- BH device ID
- BL device error code
- return CF set on error
- AH status
- 00h successful read
- BX number of POST error codes stored
- ES:DI pointer to error log
- 01h list full
- 80h invalid command
- 86h function unsupported
- note The log is a series of words, the first byte of which
- identifies the error code and the second is the device ID.
-
-
- Function 40h Read/Modify Profiles
- (Convertible)
- entry AH 40h
- AL 00h read system profile in CX,BX
- 01h write system profile from CX, BX
- 02h read internal modem profile in BX
- 03h write internal modem profile from BX
- BX profile info
- return BX internal modem profile (from 02h)
- CX,BX system profile (from 00h)
-
-
- Function 41h Wait On External Event
- (Convertible)
- entry AH 41h
- AL condition type
- bits 0-2 condition to wait for
- 0,0,0 any external event
- 0,0,1 compare and return if equal
- 0,1,0 compare and return if not equal
- 0,1,1 test and return if not zero
- 1,0,0 test and return if zero
- 3 reserved
- 4 0 user byte
- 1 port address
- 5-7 reserved
- BH condition compare or mask value
- condition codes:
- 00h any external event
- 01h compare and return if equal
- 02h compare and return if not equal
- 03h test and return if not zero
- 04h test and return if zero
- BL timeout value times 55 milliseconds
- 00h if no time limit
- DX I/O port address (if AL bit 4=1)
- ES:DI pointer to user byte (if AL bit 4=0)
-
-
- Function 42h Request System Power Off
- (Convertible)
- entry AH 42h
- AL 00h to use system profile
- 01h to force suspend regardless of profile
- return unknown
- note With early versions of DOS 5.0, the IBM L40SX would not
- Suspend/Resume if DOS=LOW was in CONFIG.SYS.
-
-
- Function 43h Read System Status
- (Convertible)
- entry AH 43h
- return AL status byte
- bit 0 LCD detached
- 1 reserved
- 2 RS232/parallel powered on
- 3 internal modem powered on
- 4 power activated by alarm
- 5 bad time
- 6 external power in use
- 7 battery low
-
-
- Function 44h Toggle Internal Modem Power
- (Convertible)
- entry AH 44h
- AL 00h to power off
- 01h to power on
- return unknown
-
-
- Function 4Fh OS Hook - Keyboard Intercept
- (except PC, PCjr, and XT)
- entry AH 4Fh
- AL scan code, CF set
- return AL scan code
- CF set processing desired
- clear scan code should not be used
- note 1) Called by int 9 handler for each keystroke to translate scan
- codes.
- 2) An OS or a TSR can capture this function to filter the raw
- keyboard data stream. The new handler can substitute a new
- scan code, return the same scan code, or return the carry flag
- clear causing the keystroke to be discarded. The BIOS default
- routine simply returns the scan code unchanged.
- 3) A program can call int 15h/fn0C0h to determine whether the host
- machine's BIOS supports keyboard intercept.
- 4) Used internally by PC-MOS/386 v4.00+ for keyboard input.
- 5) Some BIOSes do not properly support this call. Int 15h/fn 0C0h
- will tell if the BIOS is supposed to support this call.
- 6) Some versions of KEYB.COM provide additional 4Fh support.
-
-
- Function 70h EEROM handler
- (Tandy 1000HX)
- entry AH 00h read from EEROM
- BL 00h
- 01h write to EEROM
- BL word number to write (0-15)
- DX word value to write
- return DX (AH=00h) word value
- CF set on error (system is not a Tandy 1000 HX)
-
-
- Function 80h OS Hook - Device Open
- (AT, XT/286, PS/2)
- entry AH 80h
- BX device ID
- CX process ID
- return CF set on error
- AH status
- 00h OK
- note 1) Acquires ownership of a logical device for a process.
- 2) This call, along with fns 81h and 82h, defines a simple
- protocol that can be used to arbitrate usage of devices by
- multiple processes. A multitasking program manager would be
- expected to capture int 15h and provide the appropriate
- service.
- 3) The default BIOS routine for this function simply returns with
- CF clear and AH=00h.
-
-
- Function 81h Device Close
- (AT, XT/286, PS/2)
- entry AH 81h
- BX device ID
- CX process ID
- return CF set on error
- AH status
- 00h OK
- note 1) Releases ownership of a logical device for a process.
- 2) A multitasking program manager would be expected to capture
- int 15h and provide the appropriate service.
- 3) The BIOS default routine for this function simply returns with
- the CF clear and AH=00h.
-
-
- Function 82h Program Termination
- (AT, XT/286, PS/2)
- AH 82h
- BX device ID
- return CF set on error
- AH status
- 00h OK
- note 1) Closes all logical devices opened with function 80h.
- 2) A multitasking program manager would be expected to capture
- int 15h and provide the appropriate service.
- 3) The BIOS default routine for this function simply returns with
- CF clear and AH=00h.
-
-
- Function 83h Event Wait
- (AT, XT/286, Convertible, PS/2 50+)
- entry AH 83h
- AL 00h to set interval
- 01h to cancel (CX:DX and ES:BX not required)
- CX:DX number of microseconds to wait (granularity is 976
- microseconds)
- ES:BX pointer to semaphore flag (bit 7 is set when interval
- expires)
- (pointer is to caller's memory) (some sources list bit
- 15 set)
- return CF clear OK
- set function already busy
- note 1) Requests setting of a semaphore after a specified interval or
- cancels a previous request.
- 2) The calling program is responsible for clearing the semaphore
- before requesting this function.
- 3) The actual duration of an event wait is always an integral
- multiple of 976 microseconds. The CMOS date/clock chip
- interrupts are used to implement this function.
- 4) Use of this function allows programmed, hardware-independent
- delays at a finer resolution than can be obtained through use
- of the MS-DOS Get Time function (int 21h/fn 2Ch) which returns
- time in hundredths of a second.
- 5) CX:DX is a four-byte integer.
- 7) This function is called by int 70h and is not the normal int
- 08h/1Ch clock tick. It is generated by the MC146818A Real Time
- Clock chip. This is the battery backed up CMOS clock chip.
-
-
- Function 84h Read Joystick Input Settings
- (AT, XT/286, PS/2)
- entry AH 84h
- DX 00h to read current switch settings
- (return in AL)
- 01h to read resistive inputs
- return CF set on error
- (fn 00h)
- AL switch settings (bits 7-4)
- (fn 01h)
- AX stick A (X) value
- BX stick A (Y) value
- CX stick B (X) value
- DX stick B (Y) value
- note 1) An error is returned if DX does not contain a valid
- subfunction number.
- 2) If no game adapter is installed, all returned values are 00h.
- 3) Using a 250K Ohm joystick, the potentiometer values usually
- lie within the range 0-416 (0000h-01A0h).
- 4) Not all BIOSes properly return the presence of a game port.
- In my experience, most BIOSes require a joystick to actually
- be present even if the port is otherwise enabled.
-
-
- Function 85h System Request (SysReq) Key Pressed
- (except PC, PCjr, XT)
- entry AH 85h
- AL 00h key pressed
- 01h key released
- return CF set on error
- AH error code
- note 1) Called by BIOS keyboard decode routine when the SysReq key
- is detected.
- 2) The BIOS handler for this call is a dummy routine that always
- returns a success status unless called with an invalid
- subfunction number in AL.
- 3) A multitasking program manager would be expected to capture
- int 15h so that it can be notified when the user strikes the
- SysReq key.
-
-
- Function 86h Wait
- (except PC, PCjr, XT)
- AH 86h
- CX:DX 4-byte integer, number of microseconds to wait
- CX high word, DX low word
- return CF clear after wait elapses
- CF set immediately due to error
- note 1) Suspends the calling program for a specified interval in
- microseconds.
- 2) The actual duration of the wait is always an integral multiple
- of 976 microseconds.
- 3) Use of this function allows programmed, hardware-independent
- delays at a finer resolution than can be obtained through use
- of the MS-DOS Get Time function (int 21h fn 2Ch) which returns
- time in hundredths of a second.
- 4) This function calls int 70h and is not the normal Int 08h/1Ch
- clock tick. It is generated by the MC146818A Real Time Clock
- chip. This is the battery backed CMOS clock chip.
-
-
- Function 87h Memory Block Move
- (2-3-486 machines only)
- AH 87h
- CX number of words to move
- ES:SI pointer to Global Descriptor Table (GDT)
- offset 00h-0Fh reserved, set to zero
- 00h null descriptor
- 08h uninitialized, will be made into GDT
- descriptor
- 10h-11h source segment length in bytes
- (2*CX-1 or greater)
- 12h-14h 24-bit linear source address
- 15h access rights byte (always 93h)
- 16h-17h reserved, set to zero
- 18h-19h destination segment length in bytes
- (2*CX-1 or greater)
- 1Ah-1Ch 24-bit linear destination address
- 1Dh access rights byte (always 93h)
- 1Eh-1Fh reserved, set to zero
- 20h *uninitialized, used by BIOS
- 28h *uninitialized, will be made into SS
- descriptor
- (*) some sources say initialized to zero
- return CF set on error
- AH status
- 00h success - source copied into destination
- 01h RAM parity error
- 02h exception interrupt error
- 03h address line 20 gating failed
- note 1) The GDT table is composed of six 8-byte descriptors to be
- used by the CPU in protected mode. The four descriptors in
- offsets 00h-0Fh and 20h-2Fh are filled in by the BIOS before
- the CPU mode switch.
- 2) The addresses used in the descriptor table are linear
- (physical) 24-bit addresses in the range 000000h-0FFFFFFh -
- not segments and offsets - with the least significant byte at
- the lowest address and the most significant byte at the highest
- address.
- 3) Interrupts are disabled during this call; use may interfere
- with the operation of comm programs, network drivers, or other
- software that relies on prompt servicing of hardware interrupts.
- 4) This call is not valid in the OS/2 Compatibility Box.
- 5) This call will move a memory block from any real or protected
- mode address to any other real or protected mode address.
- 6) DESQview does not intercept function 87, but QEXT and QEMM do,
- thereby allowing function 87 to work correctly inside DV.
- VDISK, which uses function 87, works inside DV. If VDISK is
- sitting at the 1 MB mark, then the int 19h vector will have a
- VDISK signature in it. The normal way to check for VDISK
- presence is by checking for the string "VDISK" at offset 12h
- of the segment of the int 19h vector. If the string matches,
- then you can determine how much extended memory is reserved
- for VDISK by looking at offset 2Ch is the 3-byte address of the
- lowest extended memory address NOT in use by VDISK (i.e. if you
- see at 2Ch "00 00 14" then that means that VDISK is using
- memory up to 1 MB + 256K).
-
-
- Function 88h Get Extended Memory Size
- (AT, XT/286, PS/2)
- entry AH 88h
- return AX number of contiguous 1K blocks of extended memory
- starting at address 0FFFFh (1024Kb)
- note 1) This call will not work in the OS/2 Compatibility Box.
- 2) Some BIOSes and software manipulate the Carry flag when this
- function is called. When tested on a vanilla 386 with AMI BIOS
- the machine returned with the Carry Flag set. When 386Max was
- loaded, the flag was not set.
- 3) Used by IBM VDISK 4.0.
-
-
- Function 89h Switch Processor to Protected Mode
- (AT, XT/286, PS/2)
- entry AH 89h
- BH interrupt number for IRQ0, written to ICW2 of 8259
- PIC #1 (must be evenly divisible by 8, determines
- IRQ0-IRQ7)
- BL interrupt number for IRQ8, written to ICW2 of 8259
- PIC #2 (must be evenly divisible by 8, determines
- IRQ8-IRQ15)
- ES:SI pointer to 8-entry Global Descriptor Table for
- protected mode:
- offset 00h null descriptor, initialized to zero
- 08h GDT descriptor
- 10h IDT (Interrupt Descriptor Table)
- descriptor
- 18h DS, user's data segment
- 20h ES, user's extra segment
- 28h SS, user's stack segment
- 30h CS, user's code segment
- 38h uninitialized, used to build descriptor
- for BIOS code segment
- return CF set on error
- AH 0FFh error enabling address line 20
- CF clear function successful (CPU is in protected mode)
- AH 00h
- CS user-defined selector
- DS user-defined selector
- ES user-defined selector
- SS user-defined selector
- note 1) The user must initialize the first seven descriptors; the
- eighth is filled in by the BIOS to provide addressability for
- its own execution. The calling program may modify and use the
- eighth descriptor for any purpose after return from this
- function call.
- 2) Intercepted by Microsoft's HIMEM.SYS and Quarterdeck's
- QEMM.SYS.
-
-
- Function 90h Device Busy Loop (except PC, PCjr, XT)
- entry AH 90h
- AL predefined device type code:
- 00h disk (may timeout)
- 01h diskette (may timeout)
- 02h keyboard (no timeout)
- 03h PS/2 pointing device (may timeout)
- 80h network
- (no timeout)
- 0FCh hard disk reset (PS/2) (may timeout)
- 0FDh diskette motor start (may timeout)
- 0FEh printer (may timeout)
- ES:BX pointer to request block for type codes 80h through 0FFh
- (for network adapters, ES:BX is a pointer to network
- control block)
- return CF set if wait time satisfied
- clear if driver must perform wait
- AH status
- note 1) Used by NETBIOS, TOPS Network, Tom Wagner's CTASK multitasker,
- Hyperdisk disk cache.
- 2) Generic type codes are allocated as follows:
- 00h-7Fh non-reentrant devices; OS must arbitrate access
- serially reusable devices
- 80h-0BFh reentrant devices; ES:BX points to a unique control
- block
- 0C0h-0FFh wait-only calls, no complementary POST int 15/fn 91h
- call
- 3) Invoked by the BIOS disk, printer, network, and keyboard
- handlers prior to performing a programmed wait for I/O
- completion.
- 4) A multitasking program manager would be expected to capture
- int 15h/fn 90h so that it can dispatch other tasks while I/O
- is in progress.
- 5) The default BIOS routine for this function simply returns with
- the CF clear and AH=00h.
- 6) QEMM 6.0's "Stealth" mode suppresses this call. Quarterdeck
- claims very few programs properly handle the EMS page frame
- when using this call.
-
-
- Function 91h Interrupt Completed
- (AT, XT/286, PS/2 50+)
- entry AH 91h
- AL type code (see AH=90h above)
- 00h-7Fh serially reusable devices
- 80h-0BFh reentrant devices
- ES:BX pointer to request block for type codes 80h through
- 0BFh
- return AH 00h
- note 1) Used by NETBIOS and TOPS network, Tom Wagner's CTASK
- multitasker, Hyperdisk disk cache.
- 2) Invoked by the BIOS disk network, and keyboard handlers to
- signal that I/O is complete and/or the device is ready.
- 3) Predefined device types that may use Device POST are:
- 00H disk (may timeout)
- 01H floppy disk (may timeout)
- 02H keyboard (no timeout)
- 03H PS/2 pointing device (may timeout)
- 80H network (no timeout)
- 4) The BIOS printer routine does not invoke this function because
- printer output is not interrupt driven.
- 5) A multitasking program manager would be expected to capture
- int 15h/fn 91h so that it can be notified when I/O is
- completed and awaken the requesting task.
- 6) The default BIOS routine for this function simply returns with
- the CF flag clear and AH=00h.
- 7) QEMM 6.0's "Stealth" mode suppresses this call. Quarterdeck
- claims very few programs properly handle the EMS page frame
- when using this call.
-
-
- Function 0C0h Get System Configuration
- (XT after 1/10/86, PC Convertible, XT/286, AT, PS/2)
- entry AH 0C0h
- return CF set if BIOS doesn't support call
- ES:BX pointer to ROM system descriptor table
- bytes 00h-01h number of bytes in the following table
- (normally 16 bytes)
- 02h system ID byte; see Chapter 2 for
- interpretation
- 03h secondary ID distingushes between AT and
- XT/286, etc.
- 04h BIOS revision level, 0 for 1st release, 1 for
- 2nd, etc.
- 05h feature information byte
- bits 0 reserved
- 1 Micro Channel bus (instead of ISA or
- EISA)
- 2 extended BIOS area allocated at 640k
- 3 wait for external event supported
- (int 15h/fn 41h), used on Convertible;
- reserved on PS/2 systems
- 4 keyboard intercept: int 15h, fn 04Fh
- called upon int 09h
- 5 realtime clock installed
- 6 second 8259 installed (cascaded IRQ2)
- 7 DMA channel 3 - used by hard disk
- BIOS
- 06h unknown (set to 0) (reserved by IBM)
- 07h unknown (set to 0) (reserved by IBM)
- 08h unknown (set to 0)
- 09h unknown (set to 0) (Award BIOS copyright here)
- note 1) Int 15h is also used for the Multitask Hook on PS/2 machines.
- No register settings available yet.
- 2) The 1/10/86 XT BIOS returns an incorrect value for the
- feature byte.
- 3) Novell documents some versions of Netware prior to 2.2 as
- having problems on PS/2 machines due to a bug which did not
- return from the interrupt correctly.
- 4) Some AMI BIOSes do not support this function, such as the
- ones in early Dell machines.
-
-
- Function 0C1h Return Extended BIOS Data Area Segment Address
- (AT & later)
- entry AH 0C1h
- return CF set on error
- ES segment of XBIOS data area
- note 1) The XBIOS Data Area is allocated at the high end of
- conventional memory during the POST sequence.
- 2) The word at 0040:0013h (memory size) is updated to reflect the
- reduced amount of memory available for DOS and application
- programs.
- 3) The first byte in the XBIOS Data Area is initialized to its
- length in Kb.
- 4) A program can determine whether the XBIOS Data Area exists by
- using int 15h/fn 0C0h.
-
-
- Function 0C2h Pointing Device BIOS Interface
- (DesQview 2.x) (PS/2)
- entry AH 0C2h
- AL 00h Enable/Disable Pointing Device
- BH 00h disable
- 01h enable
- 01h Reset Pointing Device
- Resets the system's mouse or other pointing
- device, sets the sample rate, resolution, and
- other characteristics to their default values.
- return BH device ID (0=first)
- note 1) After a reset operation, the state of
- the pointing device is as follows:
- disabled;
- sample rate at 100 reports per second;
- resolution at 4 counts per millimeter;
- scaling at 1 to 1.
- 2) The data package size is unchanged by
- this function.
- 3) Apps can use the fn 0C2h subfunctions
- to initialize the pointing device to
- other parameters, then enable the
- device with fn 00h.
- 4) BL is altered on return.
- 02h Set Sampling Rate
- BH 00h 10/second
- 01h 20/second
- 02h 40/second
- 03h 60/second
- 04h 80/second
- 05h 100/second (default)
- 06h 200/second
- 03h Set Pointing Device Resolution
- BH 00h one count per mm
- 01h two counts per mm
- 02h four counts per mm (default)
- 03h eight counts per mm
- 04h Get Pointing Device Type
- return BH ID code for the mouse or other
- pointing device
- 05h Initialize Pointing Device Interface
- Sets the data package size for the system's
- mouse or other pointing device, and initializes
- the resolution, sampling rate, and scaling to
- their default values.
- BH data package size (1 - 8 bytes)
- note After this operation, the state of the
- pointing device is as follows:
- a) disabled;
- b) sample rate at 100 reports per
- second;
- c) resolution at 4 counts per
- millimeter;
- d) scaling set at 1 to 1.
- 06h Get Status or Set Scaling Factor
- Returns the current status of the system's
- mouse or other pointing device or sets the
- device's scaling factor.
- BH 00h return device status
- return BL status byte
- bits 0 set if right button
- is pressed
- 1 reserved
- 2 set if left button
- is pressed
- 3 reserved
- 4 0 1:1 scaling
- 1 2:1 scaling
- 5 0 device disabled
- 1 device enabled
- 6 0 stream mode
- 1 remote mode
- 7 reserved
- CL resolution
- 00h 1 count per mm
- 01h 2 counts per mm
- 02h 4 counts per mm
- 03h 8 counts per mm
- DL sample rate (hex count)
- 0Ah 10 reports/sec
- 14h 20 reports/sec
- 28h 40 reports/sec
- 3Ch 60 reports/sec
- 50h 80 reports/sec
- 64h 100 reports/sec
- 0C8h 200 reports/sec
- 01h set scaling to 1:1
- 02h set scaling to 2:1
- 07h Set Pointing Device Handler Address
- Notifies BIOS pointing device driver of the
- address for a routine to be called each time
- pointing device data is available.
- ES:BX address of user device handler
- return AL 00h
- return CF set on error
- AH status
- 00h successful
- 01h invalid function
- 02h invalid input
- 03h interface error
- 04h need to resend
- 05h no device handler installed
- note 1) The values in BH for those functions that take it as input are
- stored in different locations for each subfunction.
- 2) The user's handler for pointing device data is entered via a
- FAR call with four parameters on the stack:
- SS:SP+0Ah status
- SS:SP+08h x coordinate
- SS:SP+06h y coordinate
- SS:SP+04h z coordinate (always 0)
- The handler must exit via a far return without removing the
- parameters from the stack.
- 3) The status parameter word passed to the user's handler is
- interpreted as follows:
- bits 0 left button pressed
- 1 right button pressed
- 2-3 reserved
- 4 sign of x data is negative
- 5 sign of y data is negative
- 6 x data has overflowed
- 7 y data has overflowed
- 8-0Fh reserved
-
-
- Function 0C3h Enable/Disable Watchdog Timeout
- (PS/2 50+, EISA)
- entry AH 0C3h
- AL 00h disable watchdog
- 01h enable watchdog
- BX timer counter
- return CF set on error
- note 1) The watchdog timer generates an NMI.
- 2) This would be subject to protection with a real OS so temporary
- masters would not be able to seize the bus forever.
-
-
- Function 0C3h Fail-Safe Timer Control
- (EISA)
- entry AH 0C3h
- AL 00h disable fail-safe timer
- AL 01h enable fail-safe timer
- BX timer count value
- return CF clear OK
- set invalid input
- note 1) Fn 00h clears WDTIC in the Extended BIOS Data Area.
- 2) Fn 01h puts the timer in Mode 0, enables the fail-safe timer
- NMI, places the value in BX in the WDTIC. When BX counts to
- zero a fail-safe timer NMI is generated.
-
-
- Function 0C4h Programmable Option Select
- (PS/2 50+)
- entry AH 0C4h
- AL 00h return base POS register address
- 01h enable slot
- BL slot number
- 02h enable adapter
- return CF set on error
- DX base POS register address (if function 00h)
- note 1) Fn 00h returns the base Programmable Option Select register
- address, enables a slot for setup, or enables an adapter.
- 2) Valid on machines with Micro Channel Architecture (MCA) bus
- only.
- 3) After a slot is enabled with fn 01h, specific information can
- be obtained for the adapter in that slot by performing port
- input operations:
- Port Function
- 100h MCA ID (low byte)
- 101h MCA ID (high byte)
- 102h Option Select Byte 1
- bit 0 0 if disabled
- 1 if enabled
- 103h Option Select Byte 2
- 104h Option Select Byte 3
- 105h Option Select Byte 4
- bits 6-7 are channel check indicators
- 106h Subaddress Extension (low byte)
- 107h Subaddress Extension (high byte)
-
-
- Function 0C5h Used by PS/2 Model 50+ and Olivetti MCA machines
- Used by Desqview 2.2
- Used by Lotus 123 Release 2.2
- Used by Microsoft Word 5.0
- note Functions unknown. Reported by InfoWorld Nov 13 1989's Micro
- Channel 386 test as a conflict between the above software
- packages. InfoWorld said that Quarterdeck (DESQview) was
- working on a fix for their product. No other information.
-
-
- Function 0D8h Access System Information
- (EISA)
- entry AH 0D8h Read Slot Information
- AL 00h (CS specifies 16-bit addressing)
- AL 80h (CS specifies 32-bit addressing)
- CL slot number (0-63)
- return AH status
- 00h OK
- 80h invalid slot number
- 82h extended CMOS RAM corrupted
- 83h specified slot is empty
- 86h invalid BIOS call
- 87h invalid system configuration
- AL miscellaneous vendor information byte
- bits 7 duplicate IDs exist
- 6 product ID
- 5,4 slot type
- 0,0 expansion slot
- 0,1 embedded device
- 1,0 virtual device
- 1,1 reserved by EISA
- 3,0 duplicate ID number
- 0,0,0,0 no duplicated IDs
- 0,0,0,1 first duplicate ID
- -------
- 1,1,1,1 15th duplicate ID
- BH configuration utility, major version number
- BL configuration utility, minor version number
- CH configuration file, MSD of checksum
- CL configuration file, LSD of checksum
- DH number of device functions
- DL combined function information
- SI:DI four byte compressed vendor ID
- CF clear OK
- set error
- AH will be nonzero if an error occurs
-
-
- entry AH 0D8h Read Function Information
- AL 01h (CS specifies 16-bit addressing)
- AL 81h (CS specifies 32-bit addressing)
- CH function number (0-n-1)
- CL slot number (0-63)
- DS:SI address pointer for output data
- return AH status
- 00h OK
- 80h invalid slot number
- 82h extended CMOS RAM corrupted
- 83h specified slot is empty
- 86h invalid BIOS call
- 87h invalid system configuration
- DS segment for return data buffer
- SI offset for return data buffer (16 bit)
- ESI offset for return data buffer (32 bit)
- note 320-byte data buffer:
- offset size description
- 00h 2 words compressed ID
- byte 0
- bits 7 reserved
- 6-2 character 1
- 1-0 character 2
-
- byte 1
- 7-5 character 2
- 4-0 character 3
-
- byte 2
- 7-4 second digit of product number
- 3-0 first digit of product number
-
- byte 3
- 7-4 third digit of product number
- 3-0 product revision number
- 04h 1 word ID and slot information
- byte 0
- bits 7 0 no duplicate ID is present
- 1 duplicate ID is present
- 6 0 ID is readable
- 1 ID is not readable
- 5-4 slot type
- 0,0 expansion slot
- 0,1 embedded slot
- 1,0 virtual slot
- 1,1 reserved by EISA
- 3,0 duplicate ID number
- 0,0,0,0 no duplicated IDs
- 0,0,0,1 first duplicate ID
- -------
- 1,1,1,1 15th duplicate ID
-
- byte 1
- bits 7 0 configuration complete
- 1 configuration not complete
- 6-2 reserved by EISA
- 1 0 EISA IOCHKERR not supported
- 1 EISA IOCHKERR supported
- 0 0 EISA ENABLE not supported
- 1 EISA ENABLE supported
-
- 06h 1 word configuration file extension revision level
- byte 0 minor revision level
- byte 1 major revision level
-
- 07h 13words Selections
- byte 0 first selection
- byte 1 second selection
- ---- - ----------------
- byte 25 twenty-sixth selection
-
- 022h 1 byte Function Information
- bits 7 0 function is enabled
- 1 function is disabled
- 6 configuration extension free-form data
- 5 port initialization entries follow
- 4 port range entries follow
- 3 DMA entries follow
- 2 interrupt entries follow
- 1 memory entries follow
- 0 type/subtype entries follow
-
- 023h 80bytes Type and subtype ASCII string
- (strings less than 80 characters padded with
- zeroes)
- byte 0 first ASCII character
- byte 1 second ASCII character
- ---- -- ----------------------
- byte 79 eightieth ASCII character
-
- 073h 205byts Free-Form Data Field
- If Function Information byte 6 IS set, the
- next 205 bytes (to the end of the 320-byte data
- block) is a free-form data field. Byte 0 is
- the length of the field in bytes, and data
- starts with byte 1.
-
- 073h 63bytes Memory configuration information
- (if Function Information bit 6 NOT set)
- byte 0
- bits 7 0 last entry
- 1 more entries follow
- 6 reserved by EISA
- 5 0 unshared memory
- 1 shared memory
- 4,3 memory type
- 0,0 SYS (base or extended)
- 0,1 EXP (expanded)
- 1,0 VIR (virtual)
- 1,1 OTH (other)
- 2 reserved by EISA
- 1 0 not cached
- 1 cached
- 0 0 read only (ROM)
- 1 read/write (RAM)
-
- byte 1
- 7-4 reserved by EISA
- 3,2 decode size
- 0,0 20
- 0,1 24
- 1,0 32
- 1,1 reserved by EISA
- 1,0 data size (access size)
- 0,0 byte
- 0,1 word
- 1,0 doubleword
- 1,1 reserved by EISA
-
- bytes 2-4 memory start address divided by 100h
-
- bytes 5-6 memory size divided by 400h
-
- Up to 8 more 7-byte entries may follow.
-
- 0B2h 14bytes Interrupt Configuration
- (if Function Information bit 6 is NOT set)
- byte 0
- bits 7 0 last entry
- 1 more entries follow
- 6 0 not shared
- 1 shared
- 5 0 edge triggered
- 1 level triggered
- 4 reserved by EISA
- 3-0 interrupt (0-F)
-
- byte 1 reserved by EISA
-
- Up to 6 more 2-byte entries may follow.
-
- 0C0h 4 words DMA Channel Description
- (if Function Information bit 6 is NOT set)
- byte 0
- bits 7 0 last entry
- 1 more entries follow
- 6 0 not shared
- 1 shared
- 5-3 reserved by EISA
- 2-0 DMA channel number (0-7)
-
- byte 1
- 7,6 reserved by EISA
- 5,4 data timing
- 0,0 default (ISA competible)
- 0,1 type A
- 1,0 type B
- 1,1 type C (burst mode)
- 3,2 transfer size
- 0,0 8-bit
- 0,1 16-bit
- 1,0 32-bit
- 1,1 reserved by EISA
- 1,0 reserved by EISA
-
- Up to 3 more 2-byte entries may follow
-
- 0C8h 60bytes Port I/O Information
- byte 0
- bits 7 0 last entry
- 1 more entries follow
- 6 0 not shared
- 1 shared
- 5 reserved by EISA
- 4-0 number of sequential ports, less 1
-
- bytes 1,2 I/O Port Address
-
- Up to 19 more 3-byte entries may follow
-
- 104h 60bytes Initialization Data
- (If Function Information bit 6 is NOT set)
- byte 0 Initialization Type
- bits 7 0 last entry
- 1 more entries follow
- 6-3 reserved by EISA
- 2 port value or mask value
- 0 write to port without mask
- 1 write to port with mask
- 2,0 type of access
- 0,0 byte addressable
- 0,1 word addressable
- 1,0 doubleword addressable
- 1,1 reserved by EISA
-
- bytes 1,2 I/O Port address
-
- bytes 3-10 (Depends on value of byte 0, bit 2)
- if bit=0, bytes 3-6 will have the
- following values based on the access
- type specified by byte 0, bits 0-1:
-
- byte 0, bits 0-1:
- 0,0 this byte 3 - port value
- 0,1 this bytes 3,4 - port value
- 1,0 this bytes 3-6 - port value
- 1,1 reserved by EISA
-
- if bit=1, bytes 3-10 will have the
- following values based on the access
- type specified by byte 0, bits 0-1:
-
- byte 0, bits 0-1:
- 0,0 this byte 3 - port value
- 4 - port mask
- 0,1 this bytes 3,4 - port value
- 5,6 - port mask
- 1,0 this bytes 3-6 - port value
- 7-10 - port mask
- 1,1 reserved by EISA
-
- Up to 7 more 4, 5, 7, or 11-byte entries
- may follow.
-
-
- entry AH 0D8h Clear Configuration Storage
- AL 02h (CS specifies 16-bit addressing)
- AL 82h (CS specifies 32-bit addressing)
- BH configuration utility major revision level
- BL configuration utility minor revision level
- return AH 00h OK
- 84h error writing to extended CMOS RAM
- 86h invalid BIOS call
- 88h configuration utility not supported
-
-
- entry AH 0D8h Write Function Information
- AL 03h (CS specifies 16-bit addressing)
- AL 83h (CS specifies 32-bit addressing)
- CX length of data structure (in bytes)
- DS segment of data buffer
- SI offset of data buffer (16-bit)
- ESI offset of data buffer (32-bit)
- return AH 00h OK
- 84h error writing to extended CMOS RAM
- 85h CMOS RAM is full
- 86h invalid BIOS call
-
- note See Function 1 for data fields.
-
-
-
- Function 0DEh DESQview Services (DESQview)
-
-
- ┌─────────────────────────────────────────────────────────────────────┐
- │Interrupt 16h Keyboard I/O 3**9 │
- └─────────────────────────────────────────────────────────────────────┘
- (0:0058h) Access the keyboard. Scancodes are found in Appendix
- 1. ASCII codes are found in Appendix 2.
-
- IBM's original keyboard layout is referred to as the
- 84-key or "old style". It has the function keys on the
- left and an embedded cursor/numeric keypad on the
- right. The 101-key "new style" or "enhanced" keyboard
- (such as used on the PS/2s) adds several keys. The
- early BIOS will not detect the new scancodes and the
- new BIOS for some reason added new function calls for
- this purpose instead of enhancing the old ones. This
- causes some hassle when writing programs which need to
- support both keyboards fully. Most programs limit
- themselves to the 84-key functions in the interest of
- backward compatibility.
-
- The SWITCHES CONFIG.SYS command forces DOS 4.0 to use
- the standard int 16h requests for keyboard I/O rather
- than the extended int 16h requests.
-
- The DOS KEYB command does not hook into the BIOS. It
- is a total replacement for the BIOS int9 driver. The
- only good thing about this is that you can use 101-key
- keyboards on old ATs without support for enhanced
- keyboards. KEYB is very peculiar in its handling of
- the keyboard, causing some programs to break. It also
- tends to disable interrupts for a long time while
- processing each scan code.
-
- There are machines such as the Toshiba 5200 which have
- 84-key layouts but "simulate" being 101-key, at least
- as far as int 16h goes. (always good for confusing
- your software...)
-
- IBM's TopView saved the state of the capslock,
- scrollock, and numlock keys during task switches.
- DESQview does not save the toggle states unless you
- change the default setup.
-
- Function 00h Get Keyboard Input
- Read the next character in keyboard buffer, if no key
- is ready, then wait for one.
- entry AH 00h
- return AH scan code
- AL ASCII character
- note 1) Removes keystroke from buffer (destructive read).
- 2) Does not work with the extra keys on the 101-key "enhanced"
- keyboard.
-
-
- Function 01h Check Keystroke Buffer - Do Not Clear
- entry AH 01h
- return ZF 0 (clear) if character in buffer
- 1 (set) if no character in buffer
- AH scan code of character (if ZF=0)
- AL ASCII character if applicable
- note 1) Keystroke is not removed from buffer. The same character and
- scan code will be returned by the next call to Int 16h/fn 00h.
- 2) This call flushes the 101-key codes from the buffer if they
- precede an 84-key code.
-
-
- Function 02h Shift Status
- Fetches bit flags indicating shift status.
- entry AH 02h
- return AL status byte (same as [0040:0017])
- bits 7 Insert on
- 6 CapsLock on
- 5 NumLock on
- 4 ScrollLock on
- 3 Alt key down
- 2 Control key down
- 1 Left shift (left caps-shift key) down
- 0 Right shift (right caps-shift key) down
- note The Keyboard Flags Byte is stored in the BIOS Data Area at
- 0000:0417h.
-
-
- Function 03h Keyboard - Set Repeat Rate
- (PCjr, AT, XT/286, PS/2)
- entry AH 03h
- AL 00h reset typematic defaults (PCjr)
- 01h increase initial delay (PCjr)
- 02h decrease repeat rate by 1/2 (PCjr)
- 03h increase both delays by 1/2 (PCjr)
- 04h turn off typematic (PCjr)
- 05h set typematic rate (AT, PS/2)
- BH 00h-03h for delays of 250ms, 500ms, 750ms, or 1 second
- 0,0 250ms
- 0,1 500ms
- 1,0 750ms
- 1,1 1 second
- BL 00h-1Fh for typematic rates of 30cps down to 2cps
- 00000 30 01011 10.9 10101 4.5
- 00001 26.7 01100 10 10110 4.3
- 00010 24 01101 9.2 10111 4
- 00011 21.8 01110 8.6 11000 3.7
- 00100 20 01111 8 11001 3.3
- 00101 18.5 10000 7.5 11010 3
- 00110 17.1 10001 6.7 11011 2.7
- 00111 16 10010 6 11100 2.5
- 01000 15 10011 5.5 11101 2.3
- 01001 13.3 10011 5.5 11110 2.1
- 01010 12 10100 5 11111 2
- return nothing
- note 1) Subfunction 05h is available on ATs with ROM BIOS dated
- 11/15/85 and later, the XT/286, and the PS/2.
- 2) Subfunction 0 (Return to Default Keyboard State) restores the
- keyboard to its original state. An IBM AT's original state at
- power-on is typematic on, normal initial delay and normal
- typematic rate.
- 3) Subfunction 1 (Increase Initial Delay) increases the delay
- between the first character typed and the burst of typematic
- characters.
- 4) For Subfunctions 0 through 4, each time the typematic rate is
- changed, all previous states are removed.
- 5) Some clone keyboards (Northgate Omnikey and Focus) and
- BIOSES (AMI) have much higher repeat rates for the same bit
- values.
-
-
- Function 04h Keyboard Click Toggle
- (PCjr and Convertible)
- entry AH 04h
- AL 00h for click off
- 01h for click on
- return nothing
-
-
- Function 05h Load Keyboard Buffer
- (AT or PS/2 with enhanced kbd)
- entry AH 05h
- CH scan code
- CL ASCII character
- return CF set on error
- AL 00h success
- 01h if buffer full
- note Places a character and scan code at the end of the keyboard
- type-ahead buffer.
-
-
- Function 06h Keyboard Buffer Write (Fansi-Console to 2.00)
- entry AH 06h
- BX extended key value to place in typeahead buffer
- return unknown
- note This call may be dropped since it now duplicates function 05h.
-
-
- Function 07h Change Shift Key Status (Fansi-Console to 2.00)
- entry AH 07h
- AL shift key status value
- return unknown
- note Status byte is same as function 02h.
-
-
- Function 10h Get Enhanced Keystroke And Read
- (XT/286, PS/2, AT with "Enhanced" keyboard)
- entry AH 10h
- return AH scan code
- AL ASCII character if applicable
- note 1) Reads a character and scan code from the keyboard type-ahead
- buffer.
- 2) Use this function for the enhanced keyboard instead of int 16h
- fn 00h. It allows applications to obtain the scan codes for
- the additional F11, F12, and cursor control keys.
- 3) This is the enhanced version of function 00h.
-
-
- Function 11h Check Enhanced Keystroke
- (XT/286, PS/2, AT with "Enhanced" keyboard)
- entry AH 11h
- return ZF 0 (clear) if key pressed
- AH scan code
- AL ASCII character if applicable
- 1 if buffer is empty
- note 1) Keystroke is not removed from buffer. The same char and scan
- code will be returned by the next call to Int 16h/fn 10h.
- 2) Use this function for the enhanced keyboard instead of int
- 16h/fn 00h. It allows applications to test for the additional
- F11, F12, and cursor control keys.
-
-
- Function 12h Extended Get Shift Status (F11, F12 Enhanced keyboard)
- entry AH 12h
- return AX status word
- AL bit 0 right Shift key depressed
- 1 left Shift key depressed
- 2 Control key depressed
- 3 Alt key depressed
- 4 ScrollLock state active
- 5 NumLock state active
- 6 CapsLock state active
- 7 insert state is active
- AH bit 0 left Control key pressed
- 1 left Alt key depressed
- 2 right Control key pressed
- 3 right Alt key depressed
- 4 Scroll Lock key depressed
- 5 NumLock key depressed
- 6 CapsLock key depressed
- 7 SysReq key depressed
- note Use this function for the enhanced keyboard instead of int
- 16h/fn 02h.
-
-
- Function 4fh Gerkey - German keyboard remapper from OVI-SYSTEM
- entry AH 4Fh Gerkey function
- AL 56h installation check
- return AX 0FFFFh installed, otherwise not present
- BH major version
- BL minor version
-
-
- Function 70h, 71h, 72h Internal Functions (SEAware's FAKEY.COM)
- note FAKEY.COM is a TSR keyboard utility distributed to registered
- users of SEAware products.
-
-
- Function 75h Set Tick Count for Scanning (pcAnywhere 2.00)
- entry AH 75h
- AL tick count
- return none
- note 1) Sets count of 55ms timer ticks between checks for new screen
- changes.
- 2) pcAnywhere is a program that allows operation of a remote
- machine over a serial link.
-
-
- Function 76h Set Error Checking Mode (pcAnywhere 2.00)
- entry AH 76h
- AL error checking type
- 00h none
- 01h fast
- 02h slow
- return none
-
-
- Function 77h reserved (pcAnywhere 2.00)
- pcAnywhere API - reserved
-
-
- Function 78h Log Off (pcAnywhere 2.00)
- entry AL 00h wait for another call
- 01h exit but remain TSR
- 02h automatic mode - watches DTR
- 0FFh leave in current operating mode (ver. 2.1)
- return none
-
-
- Function 79h Installation Check (pcAnywhere 2.00)
- entry AH 79h
- AL 00h installation check
- return AX 0FFFFh resident and active
- 0FFFEh resident but not active
- 0FFFDh resident TSR
- 0FFFCh automatic mode
- any other value - not resident
-
-
- Function 7Ah Cancel pcAnywhere Session (pcAnywhere 2.00)
- entry AH 7Ah
- return none
- note Leaves pcAnywhere resident but unable to answer another call.
-
-
- Function 7Bh Enable/Disable Operation (pcAnywhere 2.00)
- entry AH 7Bh
- AL state
- 00h disabled
- 01h enabled
- return none
- note Remote screen is automatically refreshed when session is enabled.
-
-
- Function 7Ch Get Port Configuration (pcAnywhere 2.00)
- entry AH 7Ch
- return AH port number in binary (0-15)
- AL baud rate
- 00h 50
- 01h 75
- 02h 110
- 03h 134.5
- 04h 150
- 05h 300
- 06h 600
- 07h 1200
- 08h 1800
- 09h 2000
- 0Ah 2400
- 0Bh 4800
- 0Ch 7200
- 0Dh 9600
- 0Fh 19,200
-
-
- Function 7Dh Get/Set Terminal Parameters (pcAnywhere 2.00)
- entry AH 7Dh
- AL 00h set parameters
- 01h get parameters
- 02h get configuration header and terminal
- parameters
- CX:DS address of Terminal Parameter Block
- return AL 00h nothing
- 01h current Terminal Parameter Block in CX:DS
- 02h configuration header and Terminal Parameter
- Block in CX:DS
- note Terminal Parameter Block format: (1152 bytes) (decimal)
- 384 bytes CRT Control Information
- bytes function
- 1-8 cursor up
- 9-16 cursor down
- 17-24 cursor left
- 25-32 cursor right
- 33-40 cursor home
- 41-48 clear screen
- 49-56 clear to end of line
- 57-64 clear to end of page
- 65-72 insert line
- 73-80 delete line
- 81-88 insert character
- 89-96 delete character
- 97-104 cursor position lead in
- 105-112 between row and column
- 113-120 after cursor position
- 121-128 CRT initialization
- 256 bytes Character Translation Table
- translates ASCII characters from host. Normally
- changes IBM graphics characters to other displayable
- symbols
- 512 bytes keyboard sequences
- 641-644 cursor up
- 645-648 cursor down
- 649-652 cursor left
- 653-656 cursor right
- 657-660 home
- 661-664 end
- 665-668 PgUp
- 669-672 PgDn
- 673-676 insert
- 677-680 delete
- 681-684 control-home
- 685-688 control-end
- 689-692 control-PgUp
- 693-696 control-PgDn
- 697-700 escape
- 701-740 F1...F10
- 741-780 sF1...sF10
- 781-820 ^F1...^F10
- 821-860 aF1...aF10
- 861-964 alt A-Z
- 965-1004 alt 0-9
- 1005-1008 alt =
- 1009-1012 alt -
- 1013-1016 print screen
- 1017-1020 ctrl-left arrow
- 1021-1024 ctrl-right arrow
- 1025-1120 reserved
- 1121-1124 begin conv. mode
- 1125-1128 remote printing off
- 1129-1132 remote printing on
- 1133-1136 backspace
- 1137-1140 refresh screen
- 1141-1144 send next code
- 1145-1148 display top 24 lines
- 1149-1152 display bottom 24 lines
-
-
- Function 7Eh Serial I/O Through pcAnywhere Port (pcAnywhere 2.00)
- entry AH 7Eh
- AL I/O function
- 01h get port input status
- 02h get port input character
- 03h output character
- 04h hang up phone
- CX ASCII character to output (fn 03h)
- return (if AL=01h)
- AX 00h no character ready
- 01h character is available
- (if AL=02h)
- AL ASCII code received
-
-
- Function 7Fh Set Keyboard/Screen Mode (pcAnywhere 2.00)
- entry AH 7Fh
- AL parameters
- 00h enable remote keyboard only |
- 01h enable host keyboard only | keyboard group
- 02h enable both keyboards |
-
- 08h display top 24 lines | screen group
- 09h display bottom 24 lines |
-
- 10h Hayes modem |
- 11h other modems | modem group
- 12h direct connect |
-
-
- Function 0A5h Central Point Software PC-Tools PC-CACHE 6.0 and later
- entry AH 0A5h installation check
- AL 0FFh
- CX 1111h magic number
- return CH 00h installed
- note DOS Disk Reset call will also flush the cache from mid
- version 6 on.
-
- Function 0AFh Central Point Software PC-Tools PC-CACHE 5.x
- entry AH 0AFh flush cache
- AL 0FFh
- CX 0FFFFh magic number
- return unknown
- note This is safe, even if PC Cache in not installed.
-
-
- Function 0EDh Borland Turbo Lightning API (partial)
- entry AH 0EDh
- BH 0EDh
- BL function
- 00h installation check
- 02h pointer to Lightning internal data structure
- low byte
- 03h pointer to Lightning internal data structure
- high byte
- 04h load auxiliary dictionary
- 06h autoproof mode
- 0Fh get number of substitutions (segment)
- DS:DI pointer to string to be processed
- return AX error code (unknown)
- note I've made several attempts to get a copy of the Turbo
- Lightning API, which was originally supposed to be available
- for developers in 1985. In 1988 Borland sent me a letter
- saying they were still working on it. In late 1989 the Borland
- rep on BIX told me basically that there were no plans for
- releasing the API any more. The information here was dredged
- from Chris Dunford's LSPELL.PAS interface into Lighting.
-
-
- Function 0F0h Set CPU speed (Compaq 386)
- entry AH 0F0h set speed
- AL speed
- 00h equivalent to 6 mHz 80286 (COMMON)
- 01h equivalent to 8 mHz 80286 (FAST)
- 02h full 16 mHz (HIGH)
- 03h toggles between 8 MHz-equivalent and speed
- set by system board switch (AUTO or HIGH)
- 04h-07h unknown
- 08h full 16 MHz except 8 MHz-equivalent during
- floppy disk access
- 09h specify speed directly
- CX speed value, 1 (slowest) to 50 (full),
- 3 ~=8088
- return none?
- note 1) Used by Compaq DOS MODE command.
-
-
- Function 0F1h Read Current CPU Speed (Compaq 386)
- entry AH 0F1h
- return AL speed code (see function 0F0h above)
- if AL=09h, CX=speed code
-
-
- Function 0F2h Determine Attached Keyboard Type (Compaq 386)
- entry AH 0F2h
- return AL type
- 00h if 11-bit AT keyboard is in use
- 01h if 9-bit PC keyboard is in use
-
-
- Function 0FFh PC-Tools API
- entry AH 0FFh
- AL 0A5h detect PC-Cache disk cache (ver 5.0 & later)
- CH 11h
- CL 11h
- return CH 00h cache is present
- note PC-Tools is a Swiss-army-knife software package with an
- editor, DOS shell, cache, disk optimizer, and several other
- functions from Central Point Software.
-
-
- Function 0FFh PC-Tools API
- entry AH 0AFh
- AL 0AFh flush PC-Cache disk cache (from mid-version-6)
- CH 0FFh
- CL 0FFh
- return none
- note PC-Tools is a Swiss-army-knife software package with an
- editor, DOS shell, cache, disk optimizer, and several other
- functions from Central Point Software.
-
-
- Function 0FFh 2-The-Max VGA-16 Board
- entry AH 0FFh query zoom interrupt
- return AL zoom interrupt number
- AL+1 old BIOS keyboard handler interrupt number
- BX hot key
-
-
- Function 0FFh Programmer Interface to Carbon Copy Plus (5.0)
- entry AH 0FFh
- AL 00h check connection between CC and CCHELP
- return BL 00h Carbon Copy not connected to CCHELP
- 01h Carbon Copy is connected to CCHELP
-
- entry AL 01h disconnects and resets the line if the Host
- or CC side is connected to CCHELP
-
- entry AL 02h return a pointer to the last phone number
- dialed by CC
- return ES:DI dword pointer to ASCIIZ phone number string
-
-
-
- ┌────────────────────────────────────────────────────────────────────┐
- │Interrupt 17h Printer 3**10 │
- └────────────────────────────────────────────────────────────────────┘
- (0:005Ch) Access the parallel printer(s)
- AH is changed. All other registers left alone.
-
- Printer ports vary widely in compatibility, since the
- original IBM MDA's parallel port did not match its own
- spec. Many parallel ports do not use IRQ7 at all.
-
- The parallel port on a monochrome adapter is at 3BCh.
- The port on a parallel printer adapter is at 378h or
- 278h. At boot time, the BIOS looks at them in the
- order 3BCh, 378h, 278h, and assigns the first port it
- finds to LPT1, the second to LPT2, etc. If you have a
- monochrome adapter, LPT1 is probably 3BCh; otherwise,
- it is probably 378h.
-
-
- Function 00h Print Character/send AL to printer DX (0, 1, or 2)
- entry AH 00h
- AL ASCII character code
- DX printer to be used
- 00h PRN or LPT1
- 01h LPT2
- 02h LPT3
- return AH status byte
- bits 0 time out
- 1 unused
- 2 unused
- 3 I/O error
- 4 printer selected
- 5 out of paper
- 6 acknowledge
- 7 not busy
-
-
- Function 01h Initialize Printer
- Set init line low, send 0Ch to printer DX
- entry AH 01h
- DX printer port to be initialized (0,1,2)
- return status as below
-
-
- Function 02h Printer Status
- Read status of printer DX into AH
- entry AH 02h
- DX printer port to be used (0,1,2)
- return AH status byte
- bits 7 0 busy/paused: the printer cannot
- immediately take more data because it
- is in the middle of accepting a
- character, printing a line, is
- offline, or it is in error status.
- 1 ready
- 6 ACKnowledge line toggled: reflects the state of
- the ACK line on the printer port at the moment the
- status was read. ACK is a strobe: it goes low for
- a very short time (12 microseconds on an Epson)
- when the printer is ready for another character.
- As far as printer status is concerned, this is
- useless; it's only useful for something like an
- interrupt-driven interface. Most of the time,
- you'll see ACK high (bit 6 on), but occasionally,
- if you check status just after sending a character,
- you might see it low. ACK is low when the printer
- is powered off.
- 5 out-of-paper line toggled
- 4 printer selected: printer is selected, ready,
- or, online. There is usually a button on the
- printer to control this.
- 3 I/O error: offline, out of paper or other error
- condition such as out of ribbon.
- 2 unused
- 1 unused
- 0 timeout error: printer failed to send ACK and
- drop busy after being sent a character.
- note 1) You can expect to see these states in a properly functioning
- printer:
- Normal Offline Power off
- ====== ======= =========
- not busy/paused busy/paused busy/paused
- not out of paper not out of paper not out of paper
- selected/online not selected/online not selected/online
- not I/O error I/O error (usually) I/O error
- not timeout error not timeout error not timeout error
- 2) Not all printers return the status codes properly. That's OK,
- not all clone BIOSes do it right either. If your program
- depends on the return codes, you might want to make the code
- easily patched or configured for nonstandard hardware.
-
-
- Function 03h Versa-Spool print spooler
- entry AH 03h Versa-Spool
- AL 00h Return Signature
- 01h Toggle Pause
- 02h Clear Buffer
- 03h Request Pause Condition
- 04h Request Free Buffer Space
- 05h Request Total Buffer Size
- 06h Redirect Output to LPT1
- 07h Redirect Output to LPT2
- 08h Redirect Output to LPT3
- 09h Request Output Device
- 0Ah Request Output Speed
- 0Bh Request Device Spooled Status
-
- return (AH=00h) AX 1234h if Versa-Spool is installed
- undefined if not installed
- (AH=01h) AX 0001h if paused
- 0000h if resumed
- (AH=02h) AX 0302h not cleared
- 0000h cleared
- (AH=03h) AX 0001h if paused
- 0000h if resumed
- (AH=04h) AX remaining buffer space (in Kbytes)
- (AH=05h) AX total buffer space (in Kbytes)
- (AH=06h) AX nothing
- (AH=07h) AX nothing
- (AH=08h) AX nothing
- (AH=09h) AX printer output (0..2)
- (AH=0Ah) AX output speed in CPS
- (AH=0Bh) AX 0001h is spooled
- 0000h otherwise
-
-
- Function 03h Print String (PC-MOS/386)
- Print an entire string with one interrupt call
- entry AH 03h
- CX number of characters in string
- DX printer port number
- DS:SI pointer to string
- return AH status code (same as PC BIOS)
- CX number of characters printed
- note 1) Any redirection set up with the MOS ROUTE command or
- SPOOL.COM will be in effect.
- 2) Some serial terminals so not provide printer status feedback.
-
-
- Function 0C0h PC Magazine PCSPOOL - get printer status
- entry AH 0C0h
- DX printer port to be used (0,1,2)
- return ES:BX address of printer control block
- note PC Magazine, January 15, 1991. (Vol 10, Number 1)
-
-
- Function 0C1h PC Magazine PCSPOOL - add pause to spool queue
- entry AH 0C1h
- DX printer port to be used (0,1,2)
- DS:SI pointer to ASCIIZ string to display
- return AH printer status
-
-
- Function 0C2h PC Magazine PCSPOOL - flush queue record
- entry AH 0C2h
- DX printer port to be used (0,1,2)
- return AH printer status
-
-
- Function 0C3h PC Magazine PCSPOOL - cancel printer queue
- entry AH 0C3h
- DX printer port to be used (0,1,2)
- return AH printer status
-
-
- Function 0C4h PC Magazine PCSPOOL - determine of spooler is active
- entry AH 0C4h
- return DI 0B0BFh if PCSPOOL is loaded
- SI segment of the PSP of the active PCSPOOL
-
-
- ┌─────────────────────────────────────────────────────────────────────┐
- │Interrupt 18h ROM BASIC 3**11 │
- └─────────────────────────────────────────────────────────────────────┘
- (0:0060h) Execute ROM BASIC at address 0F600h:0000h
- entry no parameters used
- return jumps into ROM BASIC on IBM systems
- note 1) Often reboots a compatible.
- 2) Used by Turbo C 1.5. 2.0 and later do not use it.
- 3) On IBM systems, this interrupt is called if disk boot failure
- occurs.
- 4) Video interrupt on DEC Rainbow.
- 5) Digital Research's ROM-based implementation of DR-DOS uses int
- 18h as the initial entry vector into the operating system code.
- Note that some clone BIOSes may not properly implement int 18h
- in the ROM and use of DR-DOS ROMs may not always work.
- 6) Maxon 286/HD laptop: called by BIOS power management routines
- to communicate with applications.
-
-
-
- ┌─────────────────────────────────────────────────────────────────────┐
- │Interrupt 19h Bootstrap Loader / Extended Memory VDISK ID 3**12 │
- └─────────────────────────────────────────────────────────────────────┘
- (0:0064h)
- entry no parameters used
- return none
- note 1) Reads track 0, sector 1 into address 0000h:7C00h, then
- transfers control to that address. If no diskette drive is
- available, scans memory from C:000 to F:000 for a valid hard
- disk or other ROM. If none, transfers to ROM-BASIC via int 18h
- or displays loader error message.
- 2) Causes reboot of disk system if invoked while running.
- (no memory test performed).
- 3) If location 0000:0472h does not contain the value 1234h, a
- memory test (POST) will be performed before reading the boot
- sector.
- 4) VDISK from DOS 3.0+ traps this vector to determine when the
- CPU has shifted from protected mode to real mode. A detailed
- discussion can be found by Ray Duncan in PC Magazine, May 30,
- 1989.
- 5) Reportedly, some versions of DOS 2.x and all versions of DOS
- 3.x+ intercept int 19h in order to restore some interrupt
- vectors DOS takes over, in order to put the machine back to a
- cleaner state for the reboot, since the POST will not be run on
- the int 19h. These vectors are reported to be: 02h, 08h, 09h,
- 0Ah, 0Bh, 0Ch, 0Dh, 0Eh, 70h, 72h, 73h, 74h, 75h, 76h, and 77h.
- After restoring these, it restores the original int 19h vector
- and calls int 19h.
- 6) The system checks for installed ROMs by searching memory from
- 0C000h to the beginning of the BIOS, in 2k chunks. ROM memory
- is identified if it starts with the word 0AA55h. It is
- followed a one byte field length of the ROM (divided by 512).
- If ROM is found, the BIOS will call the ROM at an offset of 3
- from the beginning. This feature was not supported in the
- earliest PC machines. The last task turns control over to the
- bootstrap loader (assuming the floppy controller is
- operational).
- 7) 8255 port 60h bit 0 = 1 if booting from diskette.
- 8) All IBM BIOSes and most clone BIOSes will try to boot from
- floppy A: if no other boot device is present. Some machines
- (notably mil-spec Zeniths) have a jumper to prohibit booting
- from floppy at all, for "security reasons". Many Tandy
- machines will try to boot from drive B: if the F2 key is held
- down during POST. With a CompatiCard floppy controller you
- can boot off ANY drive.
- 9) Phoenix BIOSes with password protection enabled use this call
- for the password routine.
- 10) With early versions of DOS 5.0, int 19h fails with EMM386.EXE
- loaded and and DOS=HIGH in CONFIG.SYS
-
-
- ┌─────────────────────────────────────────────────────────────────────┐
- │Interrupt 1Ah Time of Day 3**13 │
- └─────────────────────────────────────────────────────────────────────┘
-
- (0:0068h) 1) Accesses the PC internal clock.
- 2) This interrupt is not supported on some machines, such
- as the HP150 PC.
- 3) Some "turbo" BIOSes run the clock slower than normal in
- order to throw off benchmark software, which usually
- uses int 1Ah for timekeeping.
- 4) Counts occur at the rate of 1193180/65536 counts/sec
- (about 18.2 per second).
-
- Function 00h Read System Timer Tick Counter (except PC)
- entry AH 00h
- return AL 00h if clock was read or written (via AH=0,1)
- within the current 24-hour period.
- <>0 midnight was passed since last read
- CX:DX 32-bit tick count (high 16 bits in CX)
- note 1) The returned value is the cumulative number of clock ticks
- since midnight. There are 18.2 clock ticks per second, or one
- every 54.92ms. When the counter reaches 1,573,040, it is
- cleared to zero, and the rollover flag is set.
- 2) The rollover flag is cleared by this function call, so the
- flag will only be returned nonzero once per day.
- 3) Int 1Ah/fn 01h can be used to set the counter to an arbitrary
- 32 bit value.
- 4) This function does not return seconds/100 in DL. The best you
- can do is set it to zero (or any value <=99). This means that
- your DOS clock could be up to 1 second off from the BIOS
- clock, however the effect is not cumulative.
-
-
- Function 01h Set Clock Tick Counter Value (except PC)
- entry AH 01h
- CX:DX 32-bit high word/low word count of timer ticks
- return none
- note 1) The clock ticks are incremented by timer interrupt at 18.2065
- times per second or 54.9254 milliseconds/count. Therefore:
- counts per second 18 (12h)
- counts per minute 1092 (444h)
- counts per hour 65543 (10011h)
- counts per day 1573040 (1800B0h)
- 2) The counter is zeroed when system is rebooted.
- 3) Stores a 32-bit value in the clock tick counter.
- 4) The rollover flag is cleared by this call.
-
-
- Function 02h Read Real Time Clock Time
- (AT and after)
- entry AH 02h
- return CH hours in BCD
- CL minutes in BCD
- DH seconds in BCD
- DL 00h standard time
- 01h daylight savings time
- CF 0 if clock running
- 1 if clock not operating
- note 1) Reads the current time from the CMOS time/date chip.
- 2) Also for Leading Edge Model M.
- 3) According to Phoenix this call will fail if the BIOS is
- "updating" its clock value. You should check the carry flag
- and retry if it is set following the call.
-
-
- Function 03h Set Real Time Clock Time
- (AT and after)
- entry AH 03h
- CH hours in BCD
- CL minutes in BCD
- DH seconds in BCD
- DL 0 (clear) if standard time
- 1 (set) if daylight savings time option
- return none
- note 1) Sets the time in the CMOS time/date chip.
- 2) Also for Leading Edge Model M.
-
-
- Function 04h Read Real Time Clock Date
- (AT and after)
- entry AH 04h
- return CH century in BCD (19 or 20)
- CL year in BCD
- DH month in BCD
- DL day in BCD
- CF 0 (clear) if clock is running
- 1 (set) if clock is not operating
- note 1) Reads the current date from the CMOS time/date chip.
- 2) Also for Leading Edge Model M.
-
-
- Function 05h Set Real Time Clock Date
- (AT and after)
- entry AH 05h
- CH century in BCD (19 or 20)
- CL year in BCD
- DH month in BCD
- DL day in BCD
- return none
- note 1) Sets the date in the CMOS time/date chip.
- 2) Also for Leading Edge Model M with Leading Edge DOS 2.11.
-
-
- Function 06h Set Real Time Clock Alarm
- (AT and after)
- entry AH 06h
- CH hours in BCD
- CL minutes in BCD
- DH seconds in BCD
- return CF set if alarm already set or clock inoperable
- note 1) Sets alarm in the CMOS date/time chip. Int 4Ah occurs at the
- specified alarm time every 24hrs until reset with Int 1Ah
- function 07h.
- 2) A side effect of this function is that the clock chip's
- interrupt level (IRQ8) is enabled.
- 3) Only one alarm may be active at any given time.
- 4) The program using this function must place the address of its
- interrupt handler for the alarm in the vector for Int 4Ah.
-
-
- Function 07h Reset Real Time Clock Alarm
- (AT and after)
- entry AH 07h
- return none
- note 1) Cancels any pending alarm request on the CMOS date/time chip.
- 2) This function does not disable the clock chip's interrupt
- level (IRQ8).
-
-
- Function 08h Set Real Time Clock Activated Power On Mode
- (Convertible)
- entry AH 08h
- CH hours in BCD
- CL minutes in BCD
- DH seconds in BCD
-
-
- Function 09h Read Real Time Clock Alarm Time and Status
- (Convertible and PS/2 Model 30)
- entry AH 09h
- return CH hours in BCD
- CL minutes in BCD
- DH seconds in BCD
- DL alarm status:
- 00h if alarm not enabled
- 01h if alarm enabled but will not power up system
- 02h if alarm will power up system
-
-
- Function 0Ah Read System-Timer Day Counter
- (PS/2)
- entry AH 0Ah
- return CF set on error
- CX count of days since Jan 1,1980
- note Returns the contents of the system's day counter.
-
-
- Function 0Bh Set System-Timer Day Counter
- (PS/2)
- entry AH 0Bh
- CX count of days since Jan 1,1980
- return CF set on error
- note Stores an arbitrary value in the system's day counter.
-
-
- Function 80h Set Up Sound Multiplexor
- (PCjr) (Tandy 1000?)
- entry AH 80h
- AL sound source
- 00h source is 8253 timer chip, channel 2
- 01h source is cassette input
- 02h source is I/O channel "audio in" line
- 03h source is TI sound generator chip
- return none
- note Sets up the source for tones that will appear on the PCjr's
- Audio Out bus line or RF modulator.
-
-
- Function 81h Get Sound status (Tandy 1000RL)
- parameters unknown
-
-
- Function 82h Input Sound (from the microphone) (Tandy 1000RL)
- parameters unknown
-
-
- Function 83h Output Sound (to the speaker) (Tandy 1000RL)
- parameters unknown
-
-
- Function 84h Stop Sound input and output (Tandy 1000RL)
- parameters unknown
-
-
- Function 1Ah Read Time and Date (AT&T 6300)
- entry AH 0FEh
- return BX days count (1=Jan 1, 1984)
- CH hours
- CL minutes
- DH seconds
- DL hundredths
- note Day count in BX is unique to AT&T/Olivetti computers.
-
-
-
- ┌─────────────────────────────────────────────────────────────────────┐
- │Interrupt 1Bh Control-Break 3**14 │
- └─────────────────────────────────────────────────────────────────────┘
- (0:006Ch) This interrupt is called when the keyboard handler
- detects Ctrl and Break pressed at the same time. DOS
- normally points this interrupt at its own Ctrl-Break
- handler.
-
- note 1) If the break occurred while processing an interrupt, one or
- more end of interrupt commands must be send to the 8259
- Programmable Interrupt Controller.
- 2) All I/O devices should be reset in case an operation was
- underway at the time.
- 3) It is normally pointed to an IRET during system initialization
- so that it does nothing, but some programs change it to return
- a Ctrl-C scan code and thus invoke int 23h.
-
-
-
- ┌─────────────────────────────────────────────────────────────────────┐
- │Interrupt 1Ch Timer Tick 3**15 │
- └─────────────────────────────────────────────────────────────────────┘
- (0:0070h)
- note 1) Taken 18.2065 times per second by the int 08h interrupt.
- 2) Normally vectors to dummy IRET unless PRINT.COM has been
- installed.
- 3) If an application moves the interrupt pointer, it is the
- responsibility of that application to save and restore all
- registers that may be modified.
- 4) returns values at absolute address 40:6x (BIOS Data Area);
- number of ticks since midnight
- 40:6C word timer counter high word
- 40:6E word timer counter low word
- 5) Ventura Publisher 2.0 grabs this interrupt and does not pass
- subsequent vector reassignments along. This causes problems
- with some TSRs and network software.
- 6) When installing a user interrupt for int 1Ch, the external
- interrupts must be disabled before the vector is altered. If a
- timer interrupt occurs between the setting of the offset and
- segment, an incorrect address will result.
-
-
- ┌─────────────────────────────────────────────────────────────────────┐
- │Interrupt 1Dh Vector of Video Initialization Parameters 3**16 │
- └─────────────────────────────────────────────────────────────────────┘
- (0:0074h) This doubleword address points to 3 sets of 16 bytes
- containing data to initialize for video modes for video
- modes 0 & 1 (40 column), 2 & 3 (80 column), and 4, 5 &
- 6 (graphics) on the Motorola 6845 CRT controller chip.
- 6845 registers:
- R0 horizontal total (horizontal sync in characters)
- R1 horizontal displayed (characters per line)
- R2 horizontal sync position (move display left or right)
- R3 sync width (vertical and horizontal pulse: 4-bits each)
- R4 vertical total (total character lines)
- R5 vertical adjust (adjust for 50 or 60 Hz refresh)
- R6 vertical displayed (lines of chars displayed)
- R7 vertical sync position (lines shifted up or down)
- R8 interlace (bits 4 and 5) and skew (bits 6 and 7)
- R9 max scan line addr (scan lines per character row)
- R10 cursor start (starting scan line of cursor)
- R11 cursor stop (ending scan line of cursor)
- R12 video memory start address high byte (6 bits)
- R13 video memory start address low byte (8 bits)
- R14 cursor address high byte (6 bits)
- R15 cursor address low byte (8 bits)
-
- 6845 Video Init Tables:
- table for modes 0 and 1 \
- table for modes 2 and 3 \ each table is 16 bytes long and
- table for modes 4,5, and 6 / contains values for 6845 registers
- table for mode 7 /
- 4 words size of video RAM for modes 0/1, 2/3, 4/5, and 6/7
- 8 bytes number of columns in each mode
- 8 bytes video controller mode byte for each mode
- note 1) There are four separate tables, and all four must be
- initialized if all video modes will be used.
- 2) The power-on initialization code of the computer points this
- vector to the ROM BIOS video routines.
- 3) IBM recommends that if this table needs to be modified, it
- should be copied into RAM and only the necessary changes made.
-
-
-
-
- ┌─────────────────────────────────────────────────────────────────────┐
- │Interrupt 1Eh Vector of Diskette Controller Parameters 3**17 │
- └─────────────────────────────────────────────────────────────────────┘
- (0:0078h) Dword address points to data base table that is used by
- BIOS. Default location is at 0F000:0EFC7h. 11-byte
- table format:
- bytes:
- 00h 4-bit step rate, 4-bit head unload time
- 01h 7-bit head load time, 1-bit DMA flag
- 02h 54.9254 ms ticks - delay til motor off (36-38
- typical)
- 03h sector size:
- 00h 128 bytes
- 01h 256 bytes
- 02h 512 bytes
- 03h 1024 bytes
- 04h last sector on track (8 or 9 typical)
- 05h inter-sector gap on read/write (42 typical)
- 06h data length for DMA transfers (0FFh typical)
- 07h gap length between sectors for format (80 typ)
- 08h sector fill byte for format (0F6h typical)
- 09h head settle time (in milliseconds)
- (15 to 25 typical)
- DOS 1.0 0
- DOS 1.10 0
- DOS 2.10 15
- DOS 3.1 1
- 0Ah motor start time (in 1/8 sec intervals)
- (2-4 typical)
- DOS 2.10 2
- note 1) This vector is pointed to the ROM BIOS diskette tables on
- system initialization
- 2) IBM recommends that if this table needs to be modified, it
- should be copied into RAM and only the necessary changes made.
- 3) Some versions of DOS 3.2 may contain a bug. DOS 3.2 assumes
- that the dword at 0070:0F37 contains the address of the
- diskette parameter block and changes values in that block. The
- location does contain a copy of the value at 0:78 (int 1Eh,
- DISK_POINTER) if DOS is booted from diskette, but when booted
- from the hard disk, the location contains 0:0. This leads to
- strange things, especially when running under a debugger since
- DOS overwrites parts of the interrupt vectors for interrupts 1
- to 3. The solution to the problem is to either upgrade to DOS
- 3.3 or to copy the disk parameter vector to 70:0F37 before
- running or at the start of your program.
-
-
-
- ┌─────────────────────────────────────────────────────────────────────┐
- │Interrupt 1Fh Ptr to Graphic Char Extensions (Graphics Set 2) 3**18 │
- └─────────────────────────────────────────────────────────────────────┘
- (0:007Ch) This is the pointer to data used by the ROM video
- routines to display characters above ASCII 127 while in
- CGA medium and high res graphics modes.
-
- note 1) Doubleword address points to 1K table composed of 28 8-byte
- character definition bit-patterns. First byte of each entry is
- top row, last byte is bottom row.
- 2) The first 128 character patterns are located in system ROM.
- 3) This vector is set to 000:0 at system initialization.
- 4) Used by DOS' external GRAFTABL command.
-
-
-
-